Les Chevaliers de Malte/Développeur - Ada - ACos/ArCos/ArcCos


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