[PYTHON] Ich habe versucht, das Umfangsverhältnis mit 100 Millionen Stellen zu ermitteln

Wie?

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

([Basler Problem](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%BC%E3%82%BC%E3%83%AB%E5%95%8F%E9 % A1% 8C)))

Diese Formel kann verwendet werden, um eine Annäherung von $ \ pi $ zu finden. 1 Suchen Sie $ \ sum_ {n = 1} ^ {a} \ frac {1} {n ^ 2} $ mit einer Ganzzahl von $ 1 $ oder mehr von 1 als $ a $ 2. $ \ times6 $ die Antwort in 1. 3. Berechnen Sie die Quadratwurzel der in 2 erhaltenen Antwort. Dieser Wert ist eine Annäherung an $ \ pi $.

Also habe ich es mit Python implementiert. Ich werde den Code weglassen.


Die Berechnung dauert also einige Stunden ... Es gibt kein Anzeichen dafür, dass es überhaupt enden wird ... Die Berechnung der Zeit dauert ca. 18 Stunden. Und es ist nicht sehr genau ... Außerdem scheint es ein (?) Ausdruck zu sein, der schwer zu konvergieren ist, also werde ich einen anderen Ausdruck versuchen.


** Gauß-Legendre-Algorithmus **

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}

(Zitiert aus Wikipedia)


py.py


#Es tut mir leid, dass es nicht vorhanden ist.
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])

$Python-Dateiname 100000000 1#1 kann ein beliebiger Multiplikator von 2 sein
(Es werden verschiedene angezeigt)
$ head -c 10 pi.txt
3.14159265

Außerdem https://www.blog.umentu.work/google-circle-3-14/ Sie können auch die Algorithmen auf dieser Site verwenden.

Recommended Posts