Python 2 Decimal的Sin,cos等?

时间:2012-06-08 15:31:23

标签: python decimal precision trigonometry

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

Decimal(pi).sqrt()

对于sin,cos或其他(反)三角函数有什么相似的东西吗?

docs仅提及如何以计算方式计算cossinDecimal(pi).cos()不存在from decimal import cos

更新:使用默认三角函数的问题在于,如果我每次想要计算某些内容时将它们从float转换回来,就会失败使用Decimal。 (在每次计算周围输入Decimal都很烦人,但我想我可以制作一个包装函数)

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:5)

trig函数位于math module

所以:

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

如果您正在寻找支持trig函数的Python中的多精度数学库,那么Decimal就不是了。看看mpmath。 Mpmath以任意精度支持trig function;小数没有。

答案 2 :(得分:5)

Decimal库旨在支持正确舍入的基数10算法,主要用于需要精确控制舍入的财务计算。它不是一个通用的任意精度库。

如果您需要通用的任意精度库,请查看mpmathgmpy2

答案 3 :(得分:4)

sin(a)和cos(a)的值只是特定角度的有理数(见http://planetmath.org/encyclopedia/RationalSineAndCosine.html)所以你不能将sin(a)或cos(a)的值存储为Decimals而不会丢失精确。这违背了将sin和cos值转换为Decimal并具有将sin和cos值作为Decimal返回的内置函数的目的。

此外,你不能将所有有理数存储为Decimal而不会丢失精度,因为python的小数是(-1)**_sign * _int * 10**_exp所以有理数的除数必须为10才能使Decimal以完全精度存储它。

我猜@ carrot-top的mpmath建议或一些数字算法(如Taylor系列近似)是你能得到的最好的。