... autorů J. M. Borweina a P. B. Borweina začíná s počátečním nastavením
X=SQRT(2); Pi=2+X; Y=SQRT(X)
a pokračuje rekurentními vztahy
X = 0.5 * (SQRT(X) + 1 / SQRT(X)
Pi = Pi * (X + 1) / (Y + 1)
Y = Y * (SQRT(X) + 1 / SQRT(X)) / (Y + 1)
|
IMPLEMENTACE
Jednotka: vnitřní funkce nebo vnější, ale pak bez procedure příkazu
Vazba: funkce SQRT
Parametr: přirozené číslo P - počet platných číslic konstanty Pi, implicitně P=9
Vrací: prvních P platných desítkových číslic Pi
PI: procedure
parse arg P
if P = "" then P = 9; numeric digits P
X = SQRT(2, P); Pi = 2 + X
Y = SQRT(X, P); X = Y
do forever
X = 0.5 * (X + 1 / X)
NewPi = Pi * (X + 1) / (Y + 1)
if Pi = NewPi then return Pi
Pi = NewPi
X = SQRT(X, P)
Y = (Y * X + 1 / X) / (Y + 1)
end
|
Hodnotu čísla
Pi stačí vypočítat jen jednou s dostatečnou přesností. Uložíme-li ji do souboru na disku, pak lze vytvořit funkci, která "vypočte" číslo
Pi s požadovanou přesností mnohem rychleji než funkce
PI. Příkladem je následující funkce
PICONST, kterou lze "vypočítat" prvních
P platných číslic čísla
Pi, pro
P=1,...,200. Byla vytvořena automaticky programem popsaným v
Technika: Předem vypočtené konstanty.
PICONST: procedure; V = ''
V = V || 3.14159265358979323846264338327950288419
V = V || 7169399375105820974944592307816406286208
V = V || 9986280348253421170679821480865132823066
V = V || 4709384460955058223172535940812848111745
V = V || 028410270193852110555964462294895493038196
return V
|
Příkaz Number_Pi=PI(1000) provede 10-krát hlavní cyklus ve funkci PI a trvá 79 sekund.
SOUVISLOSTI