Section courante

A propos

Section administrative du site

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 :

  1. WITH TEXT_IO;
  2.  
  3. PROCEDURE ArcCosinus IS 
  4.    
  5.    USE TEXT_IO;
  6.    
  7.    FUNCTION Sqrt(X:in Float) RETURN Float IS 
  8.       A,B,M,XN:FLOAT;
  9.    BEGIN
  10.       IF X=0.0 THEN 
  11.          RETURN 0.0;
  12.       ELSE
  13.          M:=1.0;
  14.          XN:=X;
  15.          WHILE XN>=2.0 LOOP
  16.             XN:=0.25*XN;
  17.             M:=2.0*M;
  18.          END LOOP;
  19.          WHILE XN<0.5 LOOP
  20.             XN:=4.0*XN;
  21.             M:=0.5*M;
  22.          END LOOP;
  23.          A:=XN;
  24.          B:=1.0-XN;
  25.          LOOP
  26.             A:=A*(1.0+0.5*B);
  27.             B:=0.25*(3.0+B)*B*B;
  28.             EXIT WHEN B<1.0E-15;
  29.          END LOOP;
  30.          RETURN A*M;
  31.       END IF;
  32.    END Sqrt;
  33.     
  34.  
  35.    FUNCTION ArcTan(X:IN Float) RETURN Float IS
  36.       A,B:Float;      
  37.    BEGIN
  38.       A := 1.0 / Sqrt(1.0 + (X * X));
  39.       B := 1.0;      
  40.       FOR N IN 1..11 LOOP         
  41.          A := (A + B) / 2.0;         
  42.          B := Sqrt(A * B);         
  43.       END LOOP;
  44.       RETURN X/(Sqrt(1.0+(X*X))*A);      
  45.    END ArcTan;
  46.  
  47.    FUNCTION ArcCos(A:IN Float) RETURN Float IS
  48.       PI: CONSTANT := 3.141592653589793;
  49.    BEGIN      
  50.       IF ABS(A)=1.0 THEN 
  51.          RETURN (1.0 - A) * PI / 2.0;         
  52.       ELSE 
  53.          RETURN Arctan(-A / Sqrt(1.0 - A * A)) + 2.0 * ArcTan(1.0);
  54.       END IF;
  55.    END ArcCos;
  56.    
  57. BEGIN
  58.    PUT_LINE("ArcCos(0.5)=" & FLOAT'IMAGE(ArcCos(0.5)));   
  59. END ArcCosinus;

on obtiendra le résultat suivant :

ArcCos(0.5)= 1.047197551196598

Dernière mise à jour : Samedi, le 25 août 2012