混淆Javascript中意外的Math.cos行为

时间:2016-08-23 21:46:53

标签: javascript math trigonometry

90度的余弦为0。

我理解Javascript' flex-basis需要弧度,所以我尝试过:

Math.cos

为什么这会产生Math.cos(90 * Math.PI / 180) 而不是0?

1 个答案:

答案 0 :(得分:1)

6.123233995736766e-17基本上是0。它是0.00000000000000006123233995736766。使用IEEE浮点数时,这种小错误是完全正常的。

解决方案是永远不要完全比较数字,但要比较它们是否在您期望的范围内。 EG。

var result = Math.cos(90 * Math.PI / 180);
if ( Math.abs( result - 0 ) < 1e-16 ) {
    // Test passed, result is effectively 0
}

- 0不执行任何操作,但更常见的是- x是与x进行比较的方式。您尝试与0进行比较,因此我使用- 0,但您可以将其关闭并获得相同的结果。