next up previous index
suivant: Autres applications monter: Développement de Taylor, séries précédent: Série alternée   Index


La fonction logarithme

Si nous voulons calculer ln(1 + x) pour x $ \in$ [0, 1[ avec une précision $ \varepsilon$, il suffit de calculer

$\displaystyle \sum_{{k=0}}^{n}$(- 1)k$\displaystyle {\frac{{x^{k+1}}}{{k+1}}}$

pour n tel que la valeur absolue du terme suivant soit plus petit que $ \varepsilon$ :

n tel que $\displaystyle {\frac{{x^{n+1}}}{{n+1}}}$ < $\displaystyle \varepsilon$

en effet, les signes sont alternés et la suite $ {\frac{{x^{k+1}}}{{k+1}}}$ décroit vers 0.

Si la suite décroit lentement vers 0, cette méthode est mauvaise numériquement et en temps de calcul car il y a presque compensation entre termes successifs donc perte de précision sur la mantisse et il y a beaucoup de termes à calculer. C'est le cas pour le logarithme, si x est voisin de 1, il faut calculer n termes pour avoir une précision en 1/n, par exemple 1 million de termes pour avoir une précision de 1e - 6 (sans tenir compte des erreurs d'arrondi). Si x est proche de 1/2 il faut de l'ordre de -ln($ \varepsilon$)/ln(2) termes ce qui est mieux, mais encore relativement grand (par exemple 50 termes environ pour une précision en 1e - 16, 13 termes pour 1e - 4). On a donc intérêt à se ramener si possible à calculer la fonction en un x où la convergence est plus rapide (donc | x| le plus petit possible). Par exemple pour le calcul de ln(1 + x) on peut :

Nous sommes donc en mesure de calculer précisément le logarithme ln(1 + x) pour disons | x| < 1/2. Pour calculer ln sur $ \mathbb {R}$+, on se ramène à [1, 2] en utilisant l'écriture mantisse-exposant, puis si x $ \in$ [3/2, 2] on peut en prendre la racine carrée pour se retrouver dans l'intervalle souhaité. On peut aussi effectuer une division par $ \sqrt{{2}}$.

Remarquons que si x est connu à une erreur relative $ \varepsilon$ près, comme

ln(x(1±$\displaystyle \varepsilon$)) = ln(x) + ln(1±$\displaystyle \varepsilon$)

ln(x) est connu à une erreur absolue de | ln(1±$ \varepsilon$)| $ \approx$ $ \varepsilon$. Si ln(x) est proche de 0, on a une grande perte de précision relative.

Finalement, nous savons calculer ln et exp sous réserve d'avoir dans une table la valeur de ln(2). Pour calculer ln(2) précisément, on peut utiliser

ln(2) = - ln(1/2) = - ln(1 - 1/2)

et le développement en série calculé en mode exact avec des fractions à un ordre suffisant, on majore le reste en utilisant que le terme général de la série ln(1 + x) est borné par M = 1 en x = 1, donc d'après (3) :

| Rn| $\displaystyle \leq$ $\displaystyle {\frac{{1}}{{2^n}}}$

(on peut même obtenir 1/(n2n) car on a besoin de M uniquement pour les termes d'ordre plus grand que n, on peut donc prendre M = 1/n). Par exemple, pour avoir ln(2) avec une mantisse de 80 bits, on effectue une fois pour toutes avec un logiciel de calcul formel :
a:=sum((1/2)^k/k,k=1..80)|
puis la division en base 2 avec 81 bits de précision iquo(numer(a)*2^81,denom(a))

Exercice : pour les fonctions trigonométriques, il faut une méthode de calcul de $ \pi$. On peut par exemple faire le calcul de 16 arctan(1/5) - 4 arctan(1/239) en utilisant le développement de la fonction arctan à un ordre suffisant.


next up previous index
suivant: Autres applications monter: Développement de Taylor, séries précédent: Série alternée   Index
Retour à la page principale de mat249