3

在 Python 2.6 中,我发现 Decimal 的等价物sqrt(pi)

Decimal(pi).sqrt()

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

文档只提到如何计算和cos计算sinDecimal(pi).cos()不存在也不存在from decimal import cos

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

4

4 回答 4

6

请参考这里。

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

于 2012-06-08T15:40:10.890 回答
5

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

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

于 2012-06-08T18:25:33.637 回答
4

三角函数在数学模块中

所以:

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

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

于 2012-06-08T15:40:07.030 回答
3

sin(a) 和 cos(a) 的值仅是特定角度的有理数(请参阅链接),因此您不能将 sin(a) 或 cos(a) 的值存储为小数而不损失精度。这违背了将 sin 和 cos 值转换为 Decimal 并具有将 sin 和 cos 值返回为 Decimal 的内置函数的目的。

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

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

于 2012-06-08T16:03:12.643 回答