在 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);
}
别忘了Math.PI/2
是一个近似值。不会的exactlypi/2,所以结果cos(Math.PI/2)
不会是exactly 0. Math.cos
可能会返回通过计算返回的精确值的余弦的相当准确的版本Math.PI/2
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)