Как подсчитать число π (пи) с очень большой точностью (до 10000 знаков)?
Как подсчитать число π (пи) с очень большой точностью (до 10000 знаков)?
Ответы (2 шт):
Автор решения: Fox Fox
→ Ссылка
Готовый консольный скрипт:
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")
Автор решения: Stanislav Volodarskiy
→ Ссылка
Стандартный модуль decimal реализует вещественную арифметику произвольной точности. В разделе Recipes есть код функции pi()
, который вычисляет π с установленной точностью. После небольшой доработки получилась программа:
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())
$ echo 3 | python pi.py 3.14 $ echo 10 | python pi.py 3.141592654 $ echo 20 | python pi.py 3.1415926535897932385 $ echo 10000 | python pi.py 3.1415926535...5525637568
В основе программы лежит тождество (arcsine approximation of π)
π = 6 arcsin(1/2)
Арксинус представляется рядом Тейлора (Maclaurin expansion of arcsin x):
arcsin x = ∑n≥0 (2nn) x2n+1 / (4n(2n + 1))