public double normalizedgeometricRange(double x[][], double bound[]) {
        if (x.length == 0) {
            return 0;
        }
        int n = x[0].length;
        double min[] = new double[n];
        double max[] = new double[n];

        double mean = 0;
        for (int i = 0; i < n; i++) {
            min[i] = Double.POSITIVE_INFINITY;
            max[i] = Double.NEGATIVE_INFINITY;
            for (int j = 0; j < x.length; j++) {
                if (x[j][i] < min[i]) {
                    min[i] = x[j][i];
                }
                if (x[j][i] > max[i]) {
                    max[i] = x[j][i];
                }
            }
            mean += Math.log(max[i] - min[i]) / bound[i];
        }
        mean /= n;
        return Math.exp(mean);
    }