以上代码运行时报错,能问一下原因吗,期待修改后的代码
import decimal
import numpy as np
import numexpr as ne
import math
import time
def chudnovsky_single_term(k):
"""
计算丘德诺夫斯基公式的单项式
"""
numerator = 13591409 + 545140134*k
denominator = (k+1)**3 * 640320**(2*k+1/2)
return decimal.Decimal(numerator/denominator)
def parallel_chudnovsky(precision, num_processes=4, num_threads=4):
"""
并行计算圆周率的函数
"""
decimal.getcontext().prec = precision
num_terms = int(precision / 14) # 计算公式需要的项数
t1 = time.time()
with np.errstate(divide='ignore'):
k = np.arange(num_terms, dtype=np.float128)
terms = ne.evaluate("(1103+26390*k) / (math.factorial(k)**4) * chudnovsky_single_term(k)")
with np.errstate(invalid='ignore'):
# 排除计算结果为nan和inf的项
terms = terms[np.isfinite(terms)]
total_sum = np.sum(terms, dtype=np.float128)
pi = 1 / ((12 * total_sum) ** 0.5)
t2 = time.time()
calc_time = t2 - t1
t1 = time.time()
with open("pi.txt", "w+") as f:
f.write(str(pi))
t2 = time.time()
write_time = t2 - t1
total_time = calc_time + write_time
return pi, calc_time, write_time, total_time
if __name__ == "__main__":
pi, calc_time, write_time, total_time = parallel_chudnovsky(10000000)
truncated_pi = str(pi)[-100:]
print(f"计算用时: {calc_time:.2f} 秒")
print(f"写入文件用时: {write_time:.2f} 秒")
print(f"总用时: {total_time:.2f} 秒")
print(f"计算结果: {truncated_pi}")
报错情况如下
报错代码发我一遍