【问题标题】:Why does Math.cos(90 * Math.PI/180) yield 6.123031769111... and not zero? [duplicate]为什么 Math.cos(90 * Math.PI/180) 产生 6.123031769111... 而不是零? [复制]
【发布时间】:2012-03-28 00:05:52
【问题描述】:

我将度数转换为弧度(度数 * Math.PI/180),但为什么会这样:

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

产量 6.123031769111... 而不是零?

我正在尝试使用矩阵执行 2D 旋转,结果完全不正常。

【问题讨论】:

  • 您应该显示更多代码,以便我们可以看到一些上下文。
  • @Gabe- 其实上面的代码就足够了。尝试将其输入到 JS 控制台中,您确实会得到如上所示的结果。

标签: javascript math geometry trigonometry


【解决方案1】:

的输出
Math.cos(90 * Math.PI/180)

6.123031769111886e-17

注意最后的e-17,这意味着这个数字是6.123 x 10-17。这是一个非常接近 0 的数字,实际上它是 0。它不完全是 0 的原因是由于 IEEE-754 双精度格式中的舍入错误,这会阻止您获得 π / 2 的精确表示并导致微小的舍入错误在余弦的计算中。

顺便说一句 - 当结果以 6 开头时,我也很惊讶!直到我看到最后才开始明白事情的意义。

希望这会有所帮助!

【讨论】:

  • 事实上Math.PI != π.
  • +1。也许添加像Math.cos(90 * Math.PI/180).toFixed(15) 这样的简单解决方案?
  • ( Math.cos( 90 * Math.PI / 180 ) | 0 ) === 0
【解决方案2】:
6.123233995736766e-17

是一个非常小的数字的科学记数法,接近于零。由于舍入误差等原因,它并不完全为零。

【讨论】:

    【解决方案3】:

    6.123233995736766e-17 非常非常接近于零。只需将数字四舍五入即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多