[Gvsig_desarrolladores] Uso incorrecto de valores en gvSIG

Victor Olaya volaya en unex.es
Lun Abr 16 19:09:27 CEST 2007


Un pequeño aviso para todos los que haceis el gvSIG:

A la hora de calcular valores máximos y minimos de una serie de valores,
algo habitual, hay funciones en el código de gvSIG que hacen cosas como
estas

    public static double[] getZMinMax(double[] zs) {
        if (zs == null) {
            return null;
        }

        double min = Double.MAX_VALUE;
        double max = Double.MIN_VALUE;

        for (int i = 0; i < zs.length; i++) {
            if (zs[i] > max) {
                max = zs[i];
            }

            if (zs[i] < min) {
                min = zs[i];
            }
        }

        return new double[] { min, max };
    }

Esto es de Shp.java, pero hay cosas similares por otros sitios. El problema
es que Double.MIN_VALUE no es un valor negativo muy negativo del mismo modo
que MAX_VALUE es uno muy grande y positivo, sino que es un valor pequeño en
valor absoluto, del tipo 0.0000000000000000000000000...etc ...y no del
tipo -99999999999999999999999 que es lo que parece entenderse,  así que en
el momento que aparezca algun valor negativo o cero, ya es menor que ese
MIN_VALUE y no se van a calcular bien los valores extremos. Ahí se debe
utilizar Double.NEGATIVE_INFINITY o, mejor aun, asignar min = max = zs[0] al
principio y ya esta (comprobando que al menos hay un valor). Es un fallo
tonto...pero puede dar quebraderos de cabeza ;-) Y ademas he hecho una
busqueda rapida y ya digo que hay mas sitios donde aparecen cosas parecidas.


Saludos.





Más información sobre la lista de distribución gvSIG_desarrolladores