[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