|
Bien qu'en Ada, il n'existe pas de fonction «ArcCos» ou «ArCos» permettant de calculer l'Arc Cosinus d'un cercle,
mais il peut être intéressant d'en reproduire une pour notre plaisir personnel:
WITH TEXT_IO;
PROCEDURE ArcCosinus IS
USE TEXT_IO;
FUNCTION Sqrt(X:in Float) RETURN Float IS
A,B,M,XN:FLOAT;
BEGIN
IF X=0.0 THEN
RETURN 0.0;
ELSE
M:=1.0;
XN:=X;
WHILE XN>=2.0 LOOP
XN:=0.25*XN;
M:=2.0*M;
END LOOP;
WHILE XN<0.5 LOOP
XN:=4.0*XN;
M:=0.5*M;
END LOOP;
A:=XN;
B:=1.0-XN;
LOOP
A:=A*(1.0+0.5*B);
B:=0.25*(3.0+B)*B*B;
EXIT WHEN B<1.0E-15;
END LOOP;
RETURN A*M;
END IF;
END Sqrt;
FUNCTION ArcTan(X:IN Float) RETURN Float IS
A,B:Float;
BEGIN
A := 1.0 / Sqrt(1.0 + (X * X));
B := 1.0;
FOR N IN 1..11 LOOP
A := (A + B) / 2.0;
B := Sqrt(A * B);
END LOOP;
RETURN X/(Sqrt(1.0+(X*X))*A);
END ArcTan;
FUNCTION ArcCos(A:IN Float) RETURN Float IS
PI: CONSTANT := 3.141592653589793;
BEGIN
IF ABS(A)=1.0 THEN
RETURN (1.0 - A) * PI / 2.0;
ELSE
RETURN Arctan(-A / Sqrt(1.0 - A * A)) + 2.0 * ArcTan(1.0);
END IF;
END ArcCos;
BEGIN
PUT_LINE("ArcCos(0.5)=" & FLOAT'IMAGE(ArcCos(0.5)));
END ArcCosinus;
|
on obtiendra le résultat suivant:
|
ArcCos(0.5)= 1.047197551196598
|
|
|
| Dernière mise à jour: Mardi, le 7 février 2006 |