[PYTHON] J'ai essayé de trouver le rapport de circonférence par 100 millions de chiffres

Comment?

\zeta(2) = \sum_{n=1}^{\infty}\frac{1}{n^2} = \frac{\pi^2}{6}

([Problème de Bâle](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%82%BC%E3%83%AB%E5%95%8F%E9 % A1% 8C)))

Cette formule peut être utilisée pour trouver une approximation de $ \ pi $. 1 Trouvez $ \ sum_ {n = 1} ^ {a} \ frac {1} {n ^ 2} $ avec un entier de $ 1 $ ou plus à partir de 1 comme $ a $ 2. $ \ times6 $ la réponse obtenue en 1. 3. Calculez la racine carrée de la réponse obtenue en 2. Cette valeur est une approximation de $ \ pi $.

Je l'ai donc implémenté avec python. Je vais omettre le code.


Il faut donc quelques heures pour calculer ... Il n'y a aucun signe que cela finira du tout ... Il faut environ 18 heures pour calculer l'heure. Et ce n'est pas très précis ... De plus, cela semble être une (?) Expression difficile à converger, je vais donc essayer une autre expression.


** Algorithme de Gauss-Legendre **

a_0 = 1\quad
b_0 = \frac{1}{\sqrt{2}}\quad
t_0 = \frac{1}{4}\quad
p_0 = 1\\
\\
a_{n+1} = \frac{a_n+b_n}{2}\\
b_{n+1} = \sqrt(a_nb_n)\\
t_{n+1} = t_n - 2(a_n - a_{n+1})^2\\
p_{n+1} = 2p_n
\\
\\
\pi \approx \frac{(a+b)^2}{4t}

(Cité de Wikipedia)


py.py


#Je suis désolé que ce ne soit pas en place.
from decimal import *
import math
import sys,time

d = time.time()
# set
keta = int(sys.argv[1])
c = (int(sys.argv[2]))
getcontext().prec = keta+11
print("init")
a = 1
print("b",time.time()-d)
b = 1/(Decimal(2).sqrt())
print("t",time.time()-d)
t = Decimal(0.25)
print("p",time.time()-d)
p = 1
print("n",time.time()-d)
n = math.ceil(math.log2(keta))
print("n =",n,"time =",time.time()-d)
d = time.time()
# pi
for i in range(n):
        an1 = (a+b)/2
        bn1 = Decimal(a*b).sqrt()
        tn1 = t - p * (a-an1) * (a-an1)
        pn1 = p*2
        a = an1
        b = bn1
        t = tn1
        p = pn1
        if p % c == 0:
                print(i,"\t",float((a + b) * (a + b) / (4*t)),"\ttime:", time.time()-d)

pi =  (a+ b) * (a + b) / (Decimal(4)*t)
print(float(pi))
with open("pi.txt","w") as f:
        f.write(str(pi)[:2+keta])

$nom de fichier python 100000000 1#1 peut être n'importe quel multiplicateur de 2
(Divers sont affichés)
$ head -c 10 pi.txt
3.14159265

mis-à-part https://www.blog.umentu.work/google-circle-3-14/ Vous pouvez également utiliser les algorithmes de ce site.

Recommended Posts