在 Windows 7 PC 上使用 Java(不确定这是否重要)并在应该返回 0(如 pi/2)的值上调用 Math.cos() 而不是返回小值,但除非我误解,否则这些小值是从零开始远大于 1 ulp。
Math.cos(Math.PI/2) = 6.123233995736766E-17
Math.ulp(Math.cos(Math.PI/2)) = 1.232595164407831E-32
这实际上是否在 1 ulp 之内,我只是感到困惑?这是否是一种可接受的包装方法来解决这个小错误?
public static double cos(double a){
double temp = Math.abs(a % Math.PI);
if(temp == Math.PI/2)
return 0;
return Math.cos(a);
}