En langageb de programmation Ada, il n'existe pas toujours de fonction «ArcCos» ou «ArCos» (hormis la fonction Arccos du module Numerics.Generic_Elementary_Functions) 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 : Samedi, le 25 août 2012