python - Python 中的百万位小数

标签 python decimal precision pi

我们最近深入研究了微积分中的无穷级数,话虽如此,我对此非常感兴趣。我在python中导出了自己的反正切无穷级数,并设置为1以获得pi/4*4以获得pi。我知道这不是最快的算法,所以请不要讨论我的算法。我想讨论的是如何在 python 中表示非常非常小的数字。我注意到,当我的程序迭代该系列时,它会停在小数点后 20 位(给出或取)的某个位置。我尝试使用 decimal 模块,但只达到了 509 左右。我想要一个无限(几乎)的表示。

有办法做到这样的事情吗?我认为没有任何数据类型能够处理如此巨大的数据,但如果您能向我展示解决这个问题的方法,我将非常感激。

最佳答案

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))

关于python - Python 中的百万位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16628368/

相关文章:

javascript - 如何从 JavaScript 数字中删除小数部分?

json - 如何在 Django 中对 API 响应强制保留 2 位小数?

C++ 将 Variant Decimal 转换为 Double 值

python - 有条件计算的最pythonic方法是什么?

python - 2D Numpy 数组花式索引 + 掩码

python - 为什么使用 Apache + mod_wsgi 的 Flask 应用程序上的 gevent 会引发 NotImplementedError?

ios - 将 `NSDecimalNumber` 转换为 `SInt64` 没有精度损失。 (在SInt64、iOS范围内)

C# int 存储在 double "=="精度问题

减法时的 MATLAB 精度

Python读取一个文件打印几条信息