Python gmpy2 mpfr值限制为301033位,其中301032位是正确的

Python gmpy2 mpfr值限制为301033位,其中301032位是正确的,python,windows,mpfr,gmpy,Python,Windows,Mpfr,Gmpy,我正在编写一个Python3(64位)程序,使用64位Windows10上的gmpy2模块计算出至少100万位的pi。我用的是Chudnovsky算法。该系列算法是天才,易于遵循和直接实施。我遇到的问题是用gmpy2表示非常大的精度实数 我把这个问题归结为一个非常简单的测试 检查gmpy2系统限制。它们看起来很棒 根据需要为百万位数pi设置精度上下文 为字符串变量指定百万位数的pi 使用mpfr(“百万位数pi”)为mpfr变量分配字符串转换 打印字符串变量,它有一百万位数 打印mpfr它有30

我正在编写一个Python3(64位)程序,使用64位Windows10上的gmpy2模块计算出至少100万位的pi。我用的是Chudnovsky算法。该系列算法是天才,易于遵循和直接实施。我遇到的问题是用gmpy2表示非常大的精度实数

我把这个问题归结为一个非常简单的测试

  • 检查gmpy2系统限制。它们看起来很棒
  • 根据需要为百万位数pi设置精度上下文
  • 为字符串变量指定百万位数的pi
  • 使用mpfr(“百万位数pi”)为mpfr变量分配字符串转换
  • 打印字符串变量,它有一百万位数
  • 打印mpfr它有300000多个数字
  • 当我将mpfr转换为字符串并打印时,我得到了类似的结果

    这里发生了什么,我如何从gmpy2中挤出一百万位数的精度

    import gmpy2#获取gmpy2库
    打印('max\u precision=',gmpy2.get\u max\u precision())
    print('emin\u min=',gmpy2.get\u emin\u min())
    打印('emax_max=',gmpy2.get_emax_max())
    gmpy2.get_context().precision=1000000+3#设置精度上下文。
    打印(gmpy2.get_context())
    000000_字符串='π的百万位数。我没有贴在这里,但你可以从Eve Andersson的网站上找到,http://www.eveandersson.com/pi/digits/1000000,你需要去掉这些新词
    打印('string=',百万字符串)
    百万π=gmpy2.mpfr(百万字符串)
    打印('\n\n有mpfr…\n\n')
    打印(百万卢比)
    

    在我的输出中,我得到打印的最大值、分钟数、上下文、百万位数的pi字符串以及大约前300000(给定或获取)位数的pi。我很想准确地向您展示输出,但系统指责我格式良好的输出是代码,不让我这么做。我想不出解决的办法。

    精度是用位来指定的,而不是十进制数字<代码>日志(10)/日志(2)每个十进制数字需要位。1000003位将产生
    1000003*log(2)/log(10)
    或大约301030.9个精确的十进制数字