En Delphi, les bibliothèques mathématiques fournissent déjà une fonction «ArcSin» permettant de calculer l'arc sinus d'une valeur donnée. Cette fonction est particulièrement utile lorsqu'il faut déterminer un angle à partir de son sinus, une opération fréquemment rencontrée en trigonométrie, en géométrie, en physique et dans de nombreuses applications scientifiques. Toutefois, même lorsqu'une fonction est disponible directement dans le langage, il demeure toujours intéressant d'essayer d'en reproduire le fonctionnement par soi-même afin de mieux comprendre les mécanismes mathématiques qui se cachent derrière son implantation.
La fonction arc sinus est l'inverse de la fonction sinus. Elle permet de retrouver l'angle dont on connaît déjà le rapport trigonométrique. Ce type de calcul intervient dans de nombreux problèmes pratiques, notamment lors de l'étude des triangles, du calcul des trajectoires, de la modélisation graphique en trois dimensions ou encore dans certains domaines de l'ingénierie. Comprendre comment obtenir cette valeur sans faire appel directement à la fonction intégrée constitue donc un excellent exercice de programmation et d'analyse mathématique.
L'exemple présenté ci-dessous démontre qu'il est possible de construire une fonction ArcSin à partir d'autres outils mathématiques plus fondamentaux. Dans ce cas précis, le calcul repose sur une fonction d'arc tangente spécialement développée pour l'occasion, combinée à des opérations de racine carrée et à des identités trigonométriques classiques. Cette approche illustre parfaitement la manière dont des fonctions mathématiques complexes peuvent être dérivées à partir d'un ensemble relativement restreint de fonctions de base.
Au-delà de son intérêt pédagogique, cette démarche permet également d'apprécier le travail effectué par les auteurs de bibliothèques numériques et de mieux comprendre les méthodes employées pour obtenir des résultats précis. Le programme Delphi présenté ci-dessous calcule ainsi l'arc sinus de la valeur 0,5 et produit un résultat très proche de 0,523598775 radian, ce qui correspond exactement à un angle de 30 degrés. Cet exemple montre qu'il est tout à fait possible de recréer soi-même certaines fonctions mathématiques avancées tout en conservant une excellente précision numérique :
- Program ArcSinus;
-
- {$APPTYPE CONSOLE}
-
- Uses SysUtils;
-
- Function _ArcTan(X:Real):Real;
- Var
- A,B:Real;
- N:Integer;
- Begin
- A := 1.0 / Sqrt(1.0 + (X * X));
- B := 1.0;
- For N:=1 to 11 do Begin
- A := (A + B) / 2.0;
- B := Sqrt(A * B);
- End;
- _ArcTan:=X/(Sqrt(1.0+(X*X))*A);
- End;
-
- Function _ArcSin(a:Real):Real;Begin
- If Abs(a)=1.0Then _ArcSin:=PI/2.0
- Else _ArcSin:=_ArcTan(a/Sqrt(1.0-a*a));
- End;
-
- BEGIN
- WriteLn('ArcSin(0.5)=',_ArcSin(0.5):0:15);
- END.
on obtiendra le résultat suivant :
ArcSin(0.5)=0.523598787005540