Si tiene este código:

double sin = Math.sin(angle*rad);
double cos = Math.cos(angle*rad);
double tan = Math.tan(angle*rad);

Devuelve la función de triángulo para un ángulo especificado. Sin embargo, para grados de ángulo, como 90, se devuelve -0,00000. Entonces, cuando se imprimen estos valores, -0 simplemente se ve extraño. ¿Cómo se probaría -0 en una declaración if?

He intentado con este código:

if (tan==0) { s.o.p(tan); }

Y no funciona.

0
crazicrafter1 16 oct. 2018 a las 14:33

2 respuestas

La mejor respuesta

Simplemente tome el valor absoluto de la variable cuando la compare con cero. Es probable que deba cubrir un rango, ya que no siempre es probable que sea exactamente 0.0.

if (Math.abs(tan) <= threshold) { ... }

Donde estableces threshold en un valor lo suficientemente pequeño para cubrir lo que consideras es lo suficientemente cercano a 0.

Editar : valor de umbral / épsilon agregado en comparación; gracias Ben

1
Johan 16 oct. 2018 a las 18:10

Puede comprobar si hay un cero negativo dividiendo 1 por su valor. Esto producirá Double.POSITIVE_INFINITY para un cero positivo y Double.NEGATIVE_INFINITY para un cero negativo:

if (1.0 / value == Double.NEGATIVE_INFINITY) {
    // Value was a negative zero
}
0
Erwin Bolwidt 17 oct. 2018 a las 09:12