Section courante

A propos

Section administrative du site

En Ada, il n'existe pas toujours une fonction «Atn», «ATan» ou «ArcTan» permettant de calculer le ArcTangente d'un cercle. Pour remédier à se problème, il suffit de créer une fonction ressemblant à ceci avec un préalable la fonction de racine carrée :

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

on obtiendra le résultat suivant :

ArcTan(0.00000)= 0.000000
ArcTan(0.10000)= 0.099668
ArcTan(0.20000)= 0.197396
ArcTan(0.30000)= 0.291457
ArcTan(0.40000)= 0.380506
ArcTan(0.50000)= 0.463648
ArcTan(0.60000)= 0.540420
ArcTan(0.70000)= 0.610726
ArcTan(0.80000)= 0.674741
ArcTan(0.90000)= 0.732815
ArcTan(1.00000)= 0.785398


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