Наиболее быстрый способ формирования значений цифр после запятой числа π достигается при использовании алгоритма Госпера. Реализация этого алгоритма на языке программирования Python приведена ниже.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import time
def gospers_xpi_unproven(mul=1): #if>=1 => only 1,2,3,4,5,6,10,12,15,20,30,60
q,r,t,i = 1, 180, int(60/mul), 2
while True:
u,y = 3*(3*i+1)*(3*i+2), (q*(27*i-12)+5*r)//(5*t)
yield y
q,r,t,i = 10*q*i*(2*i-1),10*u*(q*(5*i-2)+r-y*t),t*u,i+1
startTime = time.time()
xpi = gospers_xpi_unproven() #if>=1 => only 1,2,3,4,5,6,10,12,15,20,30,60
g_xpi=str(next(xpi))+"."
digits=50 #total ("3" is included)
for _ in range(digits-1):
g_xpi+=str(next(xpi))
print(g_xpi)
executionTime = (time.time() - startTime)
print('Execution time in seconds of gospers_xpi_unproven: ' + str(executionTime))
print("---------------")
Вывод консоли после исполнения кода:
1 | 3.1415926535897932384626433832795028841971693993751 |
В функии есть параметр mul, который позволяет умножать или делить число Пи в ограниченных рамках.
Ссылка на хорошую статью по обзору spigot-алгоритмов с графиками скоростей исполнения: здесь.