El método Java Math.cos () no devuelve 0 cuando se esperaba
Usar Java en una PC con Windows 7 (no estoy seguro si eso importa) y llamar a Math.cos () en valores que deberían devolver 0 (como pi / 2) en su lugar devuelve valores pequeños, pero valores pequeños que, a menos que esté malentendido, son mucho mayor que 1 ulp fuera de cero.
Math.cos(Math.PI/2) = 6.123233995736766E-17
Math.ulp(Math.cos(Math.PI/2)) = 1.232595164407831E-32
¿Es esto de hecho dentro de 1 ulp y simplemente estoy confundido? ¿Y este sería un método envolvente aceptable para resolver esta inexactitud menor?
public static double cos(double a){
double temp = Math.abs(a % Math.PI);
if(temp == Math.PI/2)
return 0;
return Math.cos(a);
}