Section courante

A propos

Section administrative du site

En Pascal, il n'existe pas de fonction «ArcSin» permettant de calculer l'Arc Sinus d'un cercle, mais il peut être intéressant d'en reproduire une pour notre plaisir personnel:

  1. Program ArcSinus;
  2.  
  3. Function Abs(x:Real):Real;Begin
  4.  If x < 0 Then x := -x;
  5.  Abs := x;
  6. End;
  7.  
  8. Function SquareRoot(X:Real):Real;
  9. Var
  10.  A,B,M,XN:Real;
  11. Begin
  12.  If X=0.0Then Begin
  13.   SquareRoot:=0.0;
  14.  End
  15.   Else
  16.  Begin
  17.   M:=1.0;
  18.   XN:=X;
  19.   While XN>=2.0 do Begin
  20.    XN:=0.25*XN;
  21.    M:=2.0*M;
  22.   End;
  23.   While XN<0.5 do Begin
  24.    XN:=4.0*XN;
  25.    M:=0.5*M;
  26.   End;
  27.   A:=XN;
  28.   B:=1.0-XN;
  29.   Repeat
  30.    A:=A*(1.0+0.5*B);
  31.    B:=0.25*(3.0+B)*B*B;
  32.   Until B<1.0E-15;
  33.   SquareRoot:=A*M;
  34.  End;
  35. End;
  36.  
  37. Function ArcTan(X:Real):Real;
  38. Var
  39.  A,B:Real;
  40.  N:Integer;
  41. Begin
  42.  A := 1.0 / SquareRoot(1.0 + (X * X));
  43.  B := 1.0;
  44.  For N:=1 to 11 do Begin
  45.   A := (A + B) / 2.0;
  46.   B := SquareRoot(A * B);
  47.  End;
  48.  ArcTan:=X/(SquareRoot(1.0+(X*X))*A);
  49. End;
  50.  
  51. Function ArcSin(a:Real):Real;
  52. Const
  53.  PI=3.141592653589793;
  54. Begin
  55.  If Abs(a)=1.0Then ArcSin:=PI/2.0
  56.               Else ArcSin:=ArcTan(a/SquareRoot(1.0-a*a));
  57. End;
  58.  
  59. BEGIN
  60.  WriteLn('ArcSin(0.5)=',ArcSin(0.5):1:15);
  61. END.

on obtiendra le résultat suivant:

ArcSin(0.5)= 5.235987755982989E-001

Dernière mise à jour : Mardi, le 25 octobre 2016