我是Python新手(也是编码新手),所以我正在阅读一本教程书。我尝试根据书中概述的代码使用 Chudnovsky 算法将 pi 计算到设定的小数位;但是,当我执行代码时,我收到一条错误消息:
> File "C:/Users/user/Documents/Python/Scripts/Tutorials/Calculating
> pi.py", line 15, in calc
> t = (Decimal(-1)**k)*(math.factorial(Decimal(6)*k))*(13591409 + 545140134*k) TypeError: 'decimal.Decimal' object cannot be interpreted
> as an integer
这是原始代码:
from decimal import Decimal, getcontext
import math
numberofdigits = int(input("please enter the number of decimal places to calculate Pi to: "))
getcontext().prec = numberofdigits
def calc(n):
t = Decimal(0)
pi = Decimal(0)
deno = Decimal(0)
k = 0
for k in range(n):
t = (Decimal(-1)**k)*(math.factorial(Decimal(6)*k))*(13591409+545140134*k)
deno = math.factorial(3*k)*(math.factorial(k)**Decimal(3))*(640320**(3*k))
pi += Decimal(t)/Decimal(deno)
pi = pi * Decimal(12)/Decimal(640320**Decimal(1.5))
pi = 1/pi
return str(pi)
print (calc(1))
我这里哪里出错了?我已经对拼写错误等进行了三次检查,但没有找到任何内容,但并不真正理解decimal.decimal类型错误的含义。
编辑:
我一直在研究它,发现如果我将分子的项分开,我会得到:
def calc(n):
t = Decimal(0)
pi = Decimal(0)
deno = Decimal(0)
k = 0 for k in range(n):
u=(Decimal(-1)**k)
x=(Decimal(6)*k)
v=math.factorial(x)
w=(13591409+545140134*k)
t = u*v*w
deno = math.factorial(3*k)*(math.factorial(k)**Decimal(3))*(640320**(3*k))
这给了我以下错误:
第 17 行,在 calc v=math.factorial(x) 中 TypeError: 'decimal.Decimal' 对象无法解释为整数
Cheers