在Python中的数学函数中使用小数



math是一个Python模块,许多人使用它来执行更高级的数学函数,并使用decimal模块。人们可以正确地计算出1.2-1.1=0.0999~,但使用decimal类型是0.1

我的问题是这两个模块不能很好地相互配合。例如,log(1000, 10)=2.9999~,但使用decimal类型会得到相同的结果。我怎样才能让这两个互相配合?我需要实现自己的功能吗?难道没有办法吗?

每个Decimal实例都有Decimal.log10Decimal.lnDecimal.logb方法,还有更多(maxsqrt(:

from decimal import Decimal
print(Decimal('0.001').log10())
# Decimal('-3')
print(Decimal('0.001').ln())
# Decimal('-6.907755278982137052053974364')

不过没有三角函数。

用于任意精度计算的更高级的替代方案是mpmath,可在PyPI获得。当然,它不会为您提供sintan,因为对于许多x值来说,sin(x)是不合理的,因此将其存储为Decimal是没有意义的。然而,给定固定的精度,您可以在mpmath的帮助下通过Tailor系列等计算这些函数。你也可以做Decimal(math.sin(0.17))来得到一些小数,它包含了接近0.17弧度的正弦。

也可以参考官方的十进制食谱。

Decimal中有一个log10方法。

from decimal import *
a = Decimal('1000')
print(a.log10())

然而,如果你试图用精确的整数解来求解对数,那么对我来说,使用一个计算对数精确值的函数会更有意义。在典型的使用中,对数函数通常会输出一些不合理的结果。您可以使用for循环和重复除法。

最新更新