Section courante

A propos

Section administrative du site

Bien qu'en Oberon, 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;

IMPORT Out;

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
  Out.String('Sqrt(');
  Out.Int(R,2);
  Out.String(')=');
  Out.Fixed(SquareRoot(R),2,10);
  Out.Ln;
  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 : Samedi, le 7 avril 2018