Section courante

A propos

Section administrative du site

La racine carrée est l'une des fonctions mathématiques les plus anciennes et les plus utilisées dans le domaine scientifique. Elle intervient dans une multitude de calculs liés à la géométrie, à la trigonométrie, à la physique, aux statistiques et à de nombreux algorithmes informatiques. En programmation, le langage C met déjà à la disposition des développeurs la fonction sqrt de la bibliothèque math.h, laquelle permet d'obtenir rapidement et précisément la racine carrée d'un nombre réel positif. Dans la majorité des applications, cette fonction intégrée est largement suffisante et constitue la solution la plus simple à utiliser. Toutefois, pour les programmeurs curieux ou les passionnés d'algorithmes numériques, il peut être particulièrement instructif de comprendre comment un ordinateur effectue réellement ce calcul.

Depuis les débuts de l'informatique, de nombreuses méthodes ont été développées afin d'obtenir une approximation de la racine carrée avec le moins d'opérations possible. Avant même l'existence des bibliothèques mathématiques modernes, les programmeurs devaient souvent implémenter eux-mêmes ce type de fonction lorsqu'ils développaient des logiciels scientifiques ou des systèmes embarqués. Comprendre ces techniques permet non seulement d'approfondir ses connaissances mathématiques, mais également de mieux apprécier le travail effectué en arrière-plan par les bibliothèques standard des langages de programmation. Une fonction de racine carrée est d'ailleurs un excellent exemple d'algorithme numérique, car elle met en ouvre des principes de convergence et d'approximation particulièrement élégants.

Le programme présenté ci-dessous démontre comment il est possible de calculer une racine carrée sans faire appel à la fonction sqrt de la bibliothèque standard. L'algorithme commence par normaliser la valeur à traiter afin de la ramener dans une plage favorable aux calculs. Il applique ensuite une série d'itérations successives qui améliorent progressivement la précision du résultat. À chaque étape, l'erreur diminue jusqu'à devenir pratiquement négligeable, permettant ainsi d'obtenir une approximation très proche de la valeur exacte. Cette méthode illustre parfaitement la manière dont de nombreux calculs numériques sont réalisés dans les logiciels scientifiques.

L'exemple fourni affiche les racines carrées de plusieurs valeurs successives, notamment 2, 4, 16 et 256. Les résultats obtenus démontrent que l'algorithme produit des valeurs conformes aux attentes et comparables à celles retournées par la fonction sqrt standard. Cet exercice constitue une excellente introduction aux méthodes numériques et aux algorithmes mathématiques utilisés en programmation. Il montre également qu'il est tout à fait possible de reconstruire soi-même certaines fonctions fondamentales à partir de principes mathématiques relativement simples. Pour les étudiants, les programmeurs ou les passionnés d'informatique scientifique, cette implémentation représente une occasion intéressante d'explorer les mécanismes cachés derrière l'une des fonctions les plus utilisées de l'univers mathématique.

Pour remédier à se problème, il suffit de créer une fonction ressemblant à ceci :

Essayer maintenant !
  1. #include <stdio.h>
  2.  
  3. double SquareRoot(double X) {
  4.   double A,B,M,XN;
  5.   if(X==0.0) {
  6.      return 0.0;
  7.   } else {
  8.      M=1.0;
  9.      XN=X;
  10.      while(XN>=2.0) {
  11.         XN=0.25*XN;
  12.         M=2.0*M;
  13.      }
  14.      while(XN<0.5) {
  15.         XN=4.0*XN;
  16.         M=0.5*M;
  17.      }
  18.      A=XN;
  19.      B=1.0-XN;
  20.      do {
  21.         A=A*(1.0+0.5*B);
  22.         B=0.25*(3.0+B)*B*B;
  23.      } while(B>=1.0E-15);
  24.      return A*M;
  25.   }
  26. }
  27.  
  28. void main() {
  29.     double R=2.0;
  30.     while(R<=1000.0) {
  31.         printf("Sqrt(%f)=%f\n",R,SquareRoot(R));
  32.         R*=R;
  33.     }
  34. }

on obtiendra le résultat suivant :

Sqrt(2)= 1.41421
Sqrt(4)= 2.0000
Sqrt(16)= 4.0000
Sqrt(256)= 16.0000


Dernière mise à jour : Samedi, le 22 août 2015