JavaScript 浮点精度问题

JavaScript floating point precision issue

我遇到浮点精度问题,有人知道为什么会这样吗?为什么影响余弦函数,而不影响正弦函数

Math.sin(90 * Math.PI / 180);
// returned: 1, expected: 1

1 - Math.sin(90 * Math.PI / 180);
// returned: 0, expected: 0


Math.cos(90 * Math.PI / 180);
// returned: 6.123233995736766e-17, expected: 0

1 - Math.cos(90 * Math.PI / 180);
// returned: 0.9999999999999999, expected: 1

这个问题的规范答案是What Every Computer Scientist Should Know About Floating-Point Arithmetic

稍加尝试,您将找到 "unexpected" 正弦函数结果的示例。

例如Math.sin(180 * Math.PI / 180);