Why does Math.cos(90 * Math.PI/180) yield 6.123031769111… and not zero? [duplicate]

好久不见. 提交于 2019-11-27 01:50:23

问题


This question already has an answer here:

  • Is floating point math broken? 31 answers

I convert degrees to radians (degrees * Math.PI/180) but why does the following:

Math.cos(90 * Math.PI/180)

yield 6.123031769111... and not zero?

I'm trying to perform 2D rotations uses matrixes and the results are completely out of whack.


回答1:


The output of

Math.cos(90 * Math.PI/180)

is

6.123031769111886e-17

Notice the e-17 at the end, which means that this number is 6.123 x 10-17. This is a number so vanishingly close to 0 that it's effectively 0. The reason that it's not identically 0 is due to rounding errors in the IEEE-754 double format which prevents you from getting an exact representation of π / 2 and causes minute rounding errors in the calculation of the cosine.

By the way - I was pretty surprised as well when the result came back starting with a 6! It's only after I looked at the very end that things started to make sense.

Hope this helps!




回答2:


6.123233995736766e-17

is scientific notation for a very small number, close to zero. It is not exactly zero because of rounding errors and so forth.




回答3:


6.123233995736766e-17 is very very close to zero. Just round the number.



来源:https://stackoverflow.com/questions/9652695/why-does-math-cos90-math-pi-180-yield-6-123031769111-and-not-zero

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!