我们最近在微积分中钻研无限系列,而且据说,我有很多乐趣。我在 python 中派生了我自己的逆tan infinte系列,并设置为1以获得pi / 4 * 4来获得pi。我知道这不是最快的算法,所以请不要讨论我的算法。我想讨论的是如何在python中表示非常小的数字。我注意到的是当我的程序迭代该系列时,它会在20位小数处停止(给或取)。我尝试使用十进制模块,只推到了大约509.我想要一个无限(几乎)表示。
有没有办法做这样的事情?我估计没有数据类型能够处理这么大的数据,但是如果你能告诉我解决方法的话,我会非常感激。
答案 0 :(得分:1)
Python的decimal module要求您指定“上下文”,这会影响表示的精确程度。
对于这类事情,我可能会推荐gmpy2 - 您可以对有理数(任意精度)进行计算,并在最后一步转换为十进制。
以下是一个示例 - 根据需要替换您自己的算法:
import gmpy2
# See https://gmpy2.readthedocs.org/en/latest/mpfr.html
gmpy2.get_context().precision = 10000
pi = 0
for n in range(1000000):
# Formula from http://en.wikipedia.org/wiki/Calculating_pi#Arctangent
numer = pow(2, n + 1)
denom = gmpy2.bincoef(n + n, n) * (n + n + 1)
frac = gmpy2.mpq(numer, denom)
pi += frac
# Print every 1000 iterations
if n % 1000 == 0:
print(gmpy2.mpfr(pi))