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


Obálka Obsah Index Hlavní stránka

změněno 1. srpna 2001
Copyright © 2000-2001 Vladimír Zábrodský, RNDr.