SQRT(P**2 + Q**2)
PROBLÉM
Vypočítat SQRT(P**2+Q**2)
ALGORITMUS
Moler a Morrison popsali rychlý algoritmus výpočtu SQRT(P**2+Q**2). Tento algoritmus má kubickou konvergenci, což znamená, že po dvou iteracích je výsledek určen s přesností na 6.5 platných míst, po třech iteracích se přesnost zvyšuje na 20 platných míst a po čtyřech iteracích na 62 platných míst.
IMPLEMENTACE
Jednotka: vnitřní funkce nebo vnější funkce, ale pak bez procedure příkazu
Parametry: čísla P, Q, přirozené číslo IterCount - počet iterací
Vrací: hodnotu SQRT(P**2+Q**2) vyjádřenou číslem s IterCount**3 desítkovými číslicemi
SQRTP2AQ2: procedure
parse arg P, Q, IterCount
numeric digits IterCount ** 3
P = ABS(P); Q = ABS(Q)
if P < Q
then do; W = P; P = Q; Q = W; end
if P = 0 then return Q
do IterCount
R = Q / P; R = R * R; R = R / (4 + R)
P = P + 2 * R * P; Q = Q * R
end
return P
|
Literatura
Bentley J., Programming Pearls
CACM, December 1986, Vol. 29, No. 12, p. 1161