在Python 2.6中,我发现sqrt(pi)
的十进制等值是
Decimal(pi).sqrt()
对于sin,cos或其他(反)三角函数有什么相似的东西吗?
docs仅提及如何以计算方式计算cos
和sin
。 Decimal(pi).cos()
不存在from decimal import cos
更新:使用默认三角函数的问题在于,如果我每次想要计算某些内容时将它们从float转换回来,就会失败使用Decimal
。 (在每次计算周围输入Decimal
都很烦人,但我想我可以制作一个包装函数)
答案 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)
答案 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系列近似)是你能得到的最好的。