Section courante

A propos

Section administrative du site

Après avoir consulté de nombreux ouvrages spécialisés, notamment des références reconnues comme Scientific Pascal, divers dictionnaires mathématiques et plusieurs manuels de programmation scientifique, il est surprenant de constater qu'il est relativement difficile de trouver une explication détaillée permettant de recalculer soi-même la fonction exponentielle. Bien que la plupart des langages modernes offrent déjà une fonction intégrée telle que `exp`, les descriptions de son fonctionnement interne demeurent souvent très sommaires. Parmi les rares exceptions rencontrées au cours de ces recherches figure le projet GNU HaypoCALC, dont les algorithmes et les méthodes numériques permettent de mieux comprendre la manière dont cette importante fonction mathématique peut être calculée avec précision.

La fonction exponentielle occupe une place centrale dans de nombreux domaines scientifiques. Elle intervient notamment en mathématiques, en physique, en chimie, en économie et dans plusieurs branches de l'informatique. Elle constitue l'inverse naturel du logarithme népérien et possède de nombreuses propriétés remarquables qui en font l'un des outils les plus utilisés pour modéliser les phénomènes de croissance, de décroissance, d'intérêts composés ou encore certains processus naturels. Malgré son apparente simplicité lorsqu'elle est utilisée à travers une bibliothèque standard, son calcul numérique demande en réalité une série d'opérations soigneusement choisies afin de conserver une excellente précision.

Le programme Delphi présenté dans cette page s'inspire directement des techniques employées dans le projet GNU mentionné précédemment. L'algorithme procède à différentes transformations de la valeur d'entrée afin de réduire l'intervalle de calcul, puis applique un développement en série permettant d'obtenir une approximation très précise de l'exponentielle recherchée. Une fois cette approximation obtenue, plusieurs opérations de reconstruction permettent de retrouver la valeur finale avec un niveau de précision comparable à celui des bibliothèques mathématiques professionnelles.

Cette approche présente également un intérêt pédagogique considérable, puisqu'elle permet de comprendre ce qui se déroule réellement derrière un simple appel à la fonction `exp`. Le code source Delphi qui suit illustre concrètement ces principes et démontre qu'il est possible d'obtenir des résultats extrêmement proches des valeurs théoriques de la fonction exponentielle. À l'aide de ce programme, vous trouverez la réponse que vous souhaitez tout en découvrant les mécanismes mathématiques qui se cachent derrière l'une des fonctions les plus importantes de l'analyse numérique moderne :

  1. Program ExpSource;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. Uses SysUtils;
  6.      
  7. Function Exposant(x:Real):Real;
  8. Var
  9.  Inverse:Boolean;
  10.  n,i:Integer;
  11.  dl,q:Real;
  12. Begin
  13.  Inverse := False;
  14.  n := 0;
  15.  dl := 1;
  16.  i := 1;
  17.  If x < 0 Then Begin
  18.   Inverse := True;
  19.   x := -x;
  20.  End;
  21.  While x >= 2 do Begin
  22.   x := x / 2;
  23.   n := n + 1;
  24.  End;
  25.  x := x / 16;
  26.  n := n + 4;
  27.  q := x;
  28.  While q > 1.0E-15 do Begin
  29.   dl := dl + q;
  30.   i := i + 1;
  31.   q := q * x / i;
  32.  End;
  33.  For i := 1 to n do dl := dl * dl;
  34.  If Inverse Then dl := 1 / dl;
  35.  Exposant := dl;
  36. End;
  37.      
  38. Var
  39.  I:Real;
  40.      
  41. BEGIN
  42.  I := 0.0;
  43.  While I <= 2.0 do Begin
  44.   WriteLn('Exp(',I:1:1,')=',Exposant(I):1:10);
  45.   I := I + 0.1;
  46.  End;
  47. END.

on obtiendra le résultat suivant :

Exp(0.0)=1.0000000000
Exp(0.1)=1.1051709181
Exp(0.2)=1.2214027582
Exp(0.3)=1.3498588076
Exp(0.4)=1.4918246977
Exp(0.5)=1.6487212707
Exp(0.6)=1.8221188004
Exp(0.7)=2.0137527075
Exp(0.8)=2.2255409285
Exp(0.9)=2.4596031111
Exp(1.0)=2.7182818284
Exp(1.1)=3.0041660240
Exp(1.2)=3.3201169229
Exp(1.3)=3.6692966678
Exp(1.4)=4.0551999669
Exp(1.5)=4.4816890704
Exp(1.6)=4.9530324244
Exp(1.7)=5.4739473919
Exp(1.8)=6.0496474645
Exp(1.9)=6.6858944423

Voir également

Science - Mathématique

Dernière mise à jour : Dimanche, le 17 août 2014