Section courante

A propos

Section administrative du site

La fonction exponentielle est l'une des fonctions mathématiques les plus importantes en sciences, en ingénierie et en informatique. Elle intervient dans une multitude de domaines, notamment la croissance des populations, les intérêts composés, la physique, les probabilités et de nombreux modèles scientifiques. Malgré son importance, il est parfois étonnamment difficile de trouver des explications détaillées sur la manière d'implémenter correctement son calcul dans un langage de programmation. Après avoir consulté divers ouvrages spécialisés, tels que des manuels de programmation scientifique et plusieurs dictionnaires mathématiques, il apparaît que peu d'entre eux décrivent en détail une méthode pratique permettant de reproduire avec précision la fonction exponentielle, c'est-à-dire l'inverse de la fonction logarithme naturel. La plupart des livres se contentent d'exposer les propriétés théoriques de la fonction sans aborder les algorithmes nécessaires à son calcul numérique. C'est en explorant les travaux du projet libre GNU, notamment les routines utilisées dans le logiciel HaypoCALC, qu'il a été possible d'identifier une méthode efficace et suffisamment précise pour être reproduite dans un programme QuickBASIC. Le principe repose sur une combinaison de transformations mathématiques et de développements en série permettant d'obtenir des résultats très proches de ceux retournés par la fonction intégrée EXP. Le programme présenté ci-dessous met en oeuvre cette technique afin de calculer la valeur de l'exponentielle pour différentes entrées positives et négatives. Il démontre qu'il est possible d'obtenir une précision remarquable même dans un environnement de programmation relativement ancien. Les résultats affichés permettent d'ailleurs de comparer directement les valeurs produites par la fonction EXP intégrée du langage avec celles générées par l'algorithme proposé. Cette comparaison met en évidence la qualité de l'approximation obtenue et illustre parfaitement comment des méthodes numériques bien choisies permettent de reproduire des fonctions mathématiques complexes avec une grande fidélité. Pour le programmeur curieux de comprendre les mécanismes cachés derrière les bibliothèques mathématiques, cet exemple constitue une excellente introduction aux techniques de calcul numérique et à l'implémentation des fonctions transcendantes.

Voici un code source QuickBASIC effectuant un calcul correct de cette formule en se basant sur les savants calculs de ce projet :

  1. DECLARE FUNCTION Expo! (x!)
  2. FOR i = 0 TO 20
  3.  PRINT USING "Exp(#.######)="; i / 10;
  4.  PRINT USING "#.###### "; EXP(i / 10);
  5.  PRINT USING "#.######"; Expo(i / 10)
  6. NEXT
  7.  
  8. FUNCTION Expo (x)
  9.  inverse = 0
  10.  n = 0: dl = 1
  11.  i = 1
  12.  IF x < 0 THEN inverse = 1: x = 0 - x
  13.  WHILE x >= 2
  14.   x = x / 2
  15.   n = n + 1
  16.  WEND
  17.  x = x / 16
  18.  n = n + 4
  19.  q = x
  20.  WHILE q > .000000000000001#
  21.   dl = dl + q
  22.   i = i + 1
  23.   q = q * x / i
  24.  WEND
  25.  FOR i = 1 TO n
  26.   dl = dl * dl
  27.  NEXT
  28.  IF inverse = 1 THEN dl = 1 / dl
  29.  Expo = dl
  30. END FUNCTION

on obtiendra le résultat suivant :

Exp(0.000000)=1.000000 1.000000
Exp(0.100000)=1.105171 1.105171
Exp(0.200000)=1.221403 1.221403
Exp(0.300000)=1.349859 1.349859
Exp(0.400000)=1.491825 1.491825
Exp(0.500000)=1.648721 1.648721
Exp(0.600000)=1.822119 1.822119
Exp(0.700000)=2.013753 2.013753
Exp(0.800000)=2.225541 2.225541
Exp(0.900000)=2.459603 2.459603
Exp(1.000000)=2.718282 2.718282
Exp(1.100000)=3.004166 3.004166
Exp(1.200000)=3.320117 3.320117
Exp(1.300000)=3.669297 3.669297
Exp(1.400000)=4.055200 4.055200
Exp(1.500000)=4.481689 4.481689
Exp(1.600000)=4.953032 4.953032
Exp(1.700000)=5.473947 5.473947
Exp(1.800000)=6.049647 6.049647
Exp(1.900000)=6.685894 6.685894
Exp(2.000000)=7.389056 7.389040

Voir également

Science - Mathématique

Dernière mise à jour : Mercredi, le 14 septembre 2016