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.41421Sqrt(4)= 2.0000 2.0000
Sqrt(16)= 4.0000 4.0000
Sqrt(256)= 16.0000 16.0000
Dernière mise à jour : Mercredi, le 15 octobre 2014