【问题标题】:Computing PI in Python 2, how to stop answer truncating [duplicate]在 Python 2 中计算 PI,如何停止截断答案 [重复]
【发布时间】:2015-03-27 04:21:58
【问题描述】:

请放轻松,我已经学习 Python 一个星期了! 我想我会尝试使用 Rumanujan 公式计算 Pi。我相信我能够正确编码。 我的答案是截断,我希望它用 200 dp 表示。在 C 语言中,我可能会使用 malloc 来执行此操作,但我知道 Python 不能那样工作。 我想从中学到的一点是:截断是由表示浮点数的限制引起的,如果是的话,是否可以修复?

谢谢。

import math
from decimal import *

getcontext().prec = 200
def iterate(n):
    sum = 0
    Decimal(sum)
    sum = (math.factorial(4*n))
    sum = (sum/math.pow(math.factorial(n), 4))
    sum = sum*((26390*n +1103)/math.pow(396, (4*n)))
    return sum
ans=0
Decimal(ans)    
print "Choose the number of iterations:\n"
itnum = int(raw_input())

for n in range (0, itnum+1):
    this_iteration = 0
    Decimal(this_iteration)
    this_iteration = iterate(n)
    ans = ans + this_iteration

ans =  ans*(math.pow(8, 0.5)/9801)
ans = 1/ans
print "%.200f" % ans

【问题讨论】:

  • 请注意,您的代码中出现了两次数字 200。您需要更改它们以打印更多数字。我敢打赌,您在开始时更改 prec,但在脚本末尾不更改格式字符串
  • 即使我使用 %r 它仍然会被截断
  • 以上问题回答了我的问题

标签: python decimal


【解决方案1】:

你的sn-p

sum = 0
Decimal(sum)

将sum 设置为int 0,并计算并丢弃Decimal 等效项。改为使用 assignment 语句:

sum = Decimal(0)

接下来,您需要确保每个中间结果也正确转换为 Decimal(默认情况下 floats 不是)。

就个人而言,我建议改用gmpy2,但是,我有偏见:-)。

【讨论】:

  • ...这证实了我从上面引用的问题中发现的内容,尽管我声明为字符串。
猜你喜欢
  • 2021-09-24
  • 2015-04-14
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
相关资源
最近更新 更多