JavaScript中的三角函数不起作用?

我不明白,为什么我从JavaScript中的三角函数中得到一些非常奇怪的值。例如:JavaScript中的三角函数不起作用?

Math.sin(Math.PI); // returns 1.2246467991473532e-16, but should return 0 

Math.cos(Math.PI/2); // returns 6.123233995736766e-17, but should return 0

Math.sin(3.14); // returns 0.0015926529164868282, whitch is ok but

Math.sin(3.141592); // returns 6.535897930762419e-7!

我在Mozilla和Chrome中试过这个,得到了同样的结果。看来三角函数的参数太精确了。

请帮忙!

回答:

你可以使用Number.EPSILON

Number.EPSILON属性表示1和最小的浮点数大于1

之间的差别,并采取价值的绝对增量,并希望和价值检查它是否小于Number.EPSILON。如果true,那么该值的误差小于浮点运算的可能错误。

console.log([  

[Math.sin(Math.PI), 0],

[Math.cos(Math.PI/2), 0],

[Math.sin(3.14), 0.0015926529164868282],

[Math.sin(3.141592), 6.535897930762419e-7]

].map(([a, b]) => Math.abs(a - b) < Number.EPSILON));

一些更读取关于与浮点值的有限数字表示该问题:

  • Does “epsilon” really guarantees anything in floating-point computations?

  • Is floating point math broken?

以上是 JavaScript中的三角函数不起作用? 的全部内容, 来源链接: utcz.com/qa/264315.html

回到顶部