为什么49.90 % 0.10在JavaScript中返回0.09999999999999581?我预计它会是0.
在用Javascript和Canvas编写的简单几何程序中,当我将角度设置为270°(1½π)时,我期望Math.cos(θ)变为零.矢量从中心向下直线,笛卡尔网格上没有x距离.相反,我明白了:
demo_angle = 270
ang = demo_angle * Math.PI / 180
x = Math.cos(ang)
console.log(x)
> -1.836909530733566e-16
Run Code Online (Sandbox Code Playgroud)
要查看数学函数的输出,请查看控制台.源代码在URL中可见(在coffeescript中)一级.
我必须在我的代码中定义"绝对值小于1e-15的任何数字应该被认为是零",但这确实不令人满意.毋庸置疑,当我尝试使用x小的值进行数学运算时,特别是因为我试图x在斜率计算中使用分母然后进行一些二次操作,我最终得出的数字超过了Number.MAX_VALUE(或Number.MIN_VALUE).
我知道浮点数学在汇编语言层面上是一种黑暗艺术,但是这样的结果似乎比可接受的更奇怪.关于我应该做什么的任何暗示?