我已经看到了一些答案,但我还没有找到适合我的答案。当我尝试这个时:
return Math.cos(270.* Math.PI/180);
我得到了
-1.8369701987210297E-16
while: -
Math.cos(Math.toRadians(270.) // gives:-1.8369701987210297E-16
我原以为这会给0。
答案 0 :(得分:5)
数字-1.8369701987210297E-16
是极接近零的数字的scientific representation。它相当于这个数字:
-0.000000000000000018369701987210297
浮点运算不精确。您应该期望小的表示错误。特别是,不可能将irrational number像pi一样完全表示为浮点数。
答案 1 :(得分:1)
Math.PI
是近似值,因此您将获得zero
的近似值。
尝试使用误差范围epsilon
,其值大约为1E-16
。
因此,如果cos结果不如epsilon那意味着它是null。
您还可以开发自己的修改后的cos
函数。
答案 2 :(得分:0)
浮点数情况下不完美精度的另一个例子。你转换它会导致一个不完美的0值。然而,它非常接近于零。
它与大值无关。如果是浮点数,总是会出现细微差别。