Sin, cos etc for Python 2 Decimal?



在Python 2.6中,我发现sqrt(pi)的十进制等价物是

Decimal(pi).sqrt()

sin、cos 或其他(逆)三角函数有类似的东西吗?

文档只提到如何计算cossin计算。 Decimal(pi).cos()不存在,from decimal import cos

更新:使用默认三角函数的问题在于,如果我每次想计算某些东西时将它们从浮点数转换回来,它就会破坏使用Decimal的意义。(在每个计算周围键入Decimal也很烦人,但我想我可以制作一个包装函数)

请参考这里。

http://docs.python.org/library/decimal.html#decimal-recipes

十进制库旨在支持正确舍入的 10 进制算术,主要用于需要精确控制舍入的财务计算。它不打算成为一个通用的任意精度库。

如果你需要一个通用的任意精度库,看看mpmath或gmpy2。

三角函数在数学模块中

所以:

>>> decimal.Decimal(math.cos(0.1))
Decimal('0.99500416527802570954008842818439006805419921875')

如果您正在 Python 中寻找支持 trig 函数的多精度数学库,那么 Decimal 不是。看看mpmath。Mpmath 支持任意精度的三角函数;十进制没有。

sin(a) 和 cos(a) 的值

只是特定角度的有理数(参见链接),因此您不能将 sin(a) 或 cos(a) 的值存储为小数而不会丢失精度。这违背了将 sin 和 cos 值转换为十进制并具有将 sin 和 cos 值作为小数返回的内置函数的目的。

此外,您不能在不损失精度的情况下将所有有理数存储为 Decimal ,因为 python 的小数是(-1)**_sign * _int * 10**_exp因此有理数的除数必须是 10,Decimal 才能完全精确地存储它。

我想@carrot-top的mpmath建议或一些数字算法(如泰勒级数近似)是你能得到的最好的。

最新更新