为什么 Math.tan() return 不同精度级别的值不同?

Why does Math.tan() return different values for different levels of precision?

我正在测试一个读取数学输入并根据运算顺序计算答案的程序。我遇到了一个问题。在计算 Math.PI / 2 的正切时,它 returns 的值是 1.633123935319537E16

但是,在我的程序中的某个地方,该值可以缩短为 1.5707964,而不是 1.5707963267948966。当我调用 Math.tan(1.5707964) 时,它 returns 的值为 -1.3660249798894601E7

我不是在寻求缩短的帮助,而是想了解不同的答案,以及在计算三角函数时我应该注意的任何其他事项。

I want to understand the divergent answers

  • tan(π/2) 未定义
  • tan(π/2 - tiny amount)量级很大,正
  • tan(π/2 + tiny amount)量级很大,负

您输入的数字不完全 π/2:

  • 1.5707963267948966192313216...π/2 稍微更 精确值(计算 here;不需要更多的小数位来说明这一点).
  • 1.5707963267948966 更小
  • 1.5707964 只是更大了。

为了说明,这里是来自 Math Is Fun 的图表: