数学.Tan表示小角度.python用小角度近似吗?



我正在尝试计算math.tan(0.000000001),我得到0.00000001

>>> math.tan(0.00000001) == 0.00000001
True

这是由于如何数学。谭实现了吗?用小角度近似吗?

我在哪里可以得到更多关于这个的文档

一种方法是,通过类比numpy。Expm1,实现一个以双精度计算tan(x)-x的函数。

虽然那天晚上的生产质量版本很棘手,但这里有一个简单的版本,应该能给出关于|x| <1 e-6

tan(x)-x = sin(x)/cos(x) - x = (sin(x)-x*cos(x))/cos(x)

对于这样小的x,我们可以写,以优于双精度

sin(x) = x - x*x*x/6 + x*x*x*x*x/120
cos(x) = 1 - x*x/2 + x*x*x*x/24

代入后得到

tan(x)-x = x*x*x*(1.0/3 - (1.0/30)*x*x)/cos(x)

这没什么特别的。Python的float只有有限的精度,我们可以使用numpy:

来探索。
0.000000010000000000000000209226 # np.tan(0.00000001)
0.000000009999999999999998554864 # np.nextafter(np.tan(0.00000001), -1)
0.000000010000000000000001863587 # np.nextafter(np.tan(0.00000001), 1)
0.000000010000000000000000333... # True value

从这里我们可以看到0.000000010000000000000000209226是最接近真实值的表示,而且将其往返到0.00000001是安全的,因此Python选择以这种方式打印它。

相关内容

  • 没有找到相关文章

最新更新