Gladir.com - Modula-2 - Sqrt (Racine carré)

Bien qu'en Modula-2, il existe une fonction «Sqrt» permettant de calculer la racine carré, il peut quand même être amusant d'effectuer se genre de calcul nous même. Pour remédier à se problème, il suffit de créer une fonction ressemblant à ceci:
MODULE sqrt;

FROM InOut IMPORT WriteString, WriteLn;
FROM SWholeIO IMPORT WriteInt;
FROM SRealIO IMPORT WriteReal;

PROCEDURE SquareRoot(X:REAL):REAL;
VAR
 A,B,M,XN:REAL;
BEGIN
 IF X=0.0 THEN
  RETURN 0.0;
 ELSE
  M:=1.0;
  XN:=X;
  WHILE XN>=2.0 DO
   XN:=0.25*XN;
   M:=2.0*M;
  END;
  WHILE XN<0.5 DO
   XN:=4.0*XN;
   M:=0.5*M;
  END;
  A:=XN;
  B:=1.0-XN;
  REPEAT
   A:=A*(1.0+0.5*B);
   B:=0.25*(3.0+B)*B*B;
  UNTIL B<1.0E-15;
  RETURN A*M;
 END;
END SquareRoot;

VAR
 R:INTEGER;

BEGIN
 R:=2;
 WHILE R<=1000 DO
  WriteString('Sqrt(');
  WriteInt(R,2);
  WriteString(')=');
  WriteReal(SquareRoot(FLOAT(R)),10);
  WriteLn;
  R:=R*R;
 END;
END sqrt.

on obtiendra le résultat suivant:
Sqrt(2)= 1.41421 1.41421
Sqrt(4)= 2.0000 2.0000
Sqrt(16)= 4.0000 4.0000
Sqrt(256)= 16.0000 16.0000



Dernière mise à jour: Mardi, le 7 février 2006