Math.cos() gives wrong results
根据我的理解和我的计算器,cos(90 degrees)等于0。在我的代码中,我有一个函数,允许我在需要时键入度数:
1 2 3 4
| function deg(i)
{
return i*Math.PI/180;
} |
但是,当调用Math.cos(deg(90));时,我接收的输出是6.123233995736766e-17。
为什么会发生这样的事情?
(请原谅我英语不好)
- 浮点运算是否中断?
- What Every Computer Scientist Should Know About Floating-Point Arithmetic。
- @阿登尼奥,谢谢,真的是这样,我怎么把我的邮件标记成副本呢?
deg(90)近似等于90*Math.PI/180,您的结果相当于0。
所以,一切都很好;)
注意,它必须是近似的,因为没有办法精确地表示π。
- 有点过了6真的不等于零吗?
- @阿登诺,埃多克斯1〔1〕?6.123233995736766e-17离6很远。那是6 * 10 ^ -17。
- @达林迪米特洛夫-至少可以对科学符号有一点解释吗?
- 显然,我不介意非常接近0的值而不是实际的0,但是你能解释一下6.123233995736766e-17是接近0还是6吗?
- @阿登诺,这是标准科学记数法。不需要进一步解释。
- @Adeneo 6.123233995736766E-17为0.000000000061233995736766
- @Darindimitrov——我知道,但我猜不是每个人都知道,他们也不知道为什么JavaScript和其他语言计算不正确。
- 仅仅说它是"近似值"对我来说似乎不是一个很好的答案,但似乎我错了。
- @Adeneo,这就是为什么在我的评论中,我链接了一篇关于What Every Computer Scientist Should Know About Floating-Point Arithmetic的文章:docs.oracle.com/cd/e19957-01/806-3568/ncg ou goldberg.html,这样它们就不会被混淆。
- @Darindimitrov——这就是为什么我在评论中提到了一个问题,它实际上回答了这个问题。是的,我读了你很久以前链接到的那篇文章