import decimal
def pi():
with decimal.localcontext() as ctx:
ctx.prec += 2
prev_s = 0
t = decimal.Decimal(3)
s = 3
n = 1
na = 0
d = 0
da = 24
while s != prev_s:
prev_s = s
n += na
na += 8
d += da
da += 32
t = t * n / d
s += t
return +s
p = int(input())
with decimal.localcontext() as ctx:
ctx.prec = p
print(pi())
import os
print("-" * 50 + "\nВычисление числа Пи с точностью до n знаков после запятой:\n" + "-" * 50)
ok = True
try: import mpmath
except Exception as e: print(f"Ошибка импорта модуля! Подробнее:\n{e}"); ok = False
if ok:
# Устанавливаем точность до 10000 знаков:
mpmath.mp.dps = 10000
# Выводим число Пи:
print(f"\nЧисло Пи с точностю до {mpmath.mp.dps} знаков после запятой:\n\n", mpmath.mp.pi)
print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul" if os.name == "nt" else "read > /dev/null")
标准模块decimal实现任意精度实数算术。在“食谱”部分中,有一个函数的代码,该函数将π
pi()计算到指定的精度。经过一点修改,程序变成了:该程序基于恒等式(π的反正弦近似)
π = 6 arcsin( 1 / 2 )
反正弦由泰勒级数表示(反正弦 x的麦克劳林展开式):
arcsin x = Σ n≥0 ( 2n n ) x 2n+1 / (4 n (2n + 1))
准备好的控制台脚本: