Aller au contenu

Leçon 8

L'algorithme de Briggs

Vidéo 8 : L'algorithme de Briggs · 3 min 37 s · sous-titres en français

Le cours écrit

8.1 Un peu d'histoire

Le programme le rappelle : « les procédés par lesquels les mathématiciens ont construit et tabulé le logarithme […] illustrent les liens entre discret et continu ». Au début du XVIIe siècle, il n'existe pas de machine à calculer. Pour multiplier de grands nombres, les astronomes et les navigateurs utilisent des tables de logarithmes : grâce à la relation ln⁡(ab)=ln⁡a+ln⁡b\ln(ab) = \ln a + \ln b, une multiplication devient une addition. L'Écossais John Napier (ou Neper) publie les premières tables en 1614 ; le mot « népérien » vient de son nom. L'Anglais Henry Briggs publie en 1624 des tables très précises, qu'il calcule en extrayant des racines carrées successives : c'est la méthode qui suit.

8.2 Deux idées

On veut calculer ln⁡a\ln a, pour un réel a>0a > 0. On définit la suite (ak)(a_k) par a0=aa_0 = a et ak+1=aka_{k+1} = \sqrt{a_k} : on prend des racines carrées successives.

  1. Chaque racine carrée divise le logarithme par deux. ln⁡(ak+1)=ln⁡(ak)=12ln⁡(ak)\ln\left(a_{k+1}\right) = \ln\left(\sqrt{a_k}\right) = \dfrac12\ln\left(a_k\right). Donc ln⁡(ak)=ln⁡a2k\ln\left(a_k\right) = \dfrac{\ln a}{2^k}, c'est-à-dire ln⁡a=2kln⁡(ak).\ln a = 2^k\ln\left(a_k\right).
  2. Près de 11, ln⁡x≈x−1\ln x \approx x - 1 (tangente en 11, leçon 4). Or ak=eln⁡a/2ka_k = \mathrm{e}^{\ln a / 2^k} se rapproche de e0=1\mathrm{e}^0 = 1 quand kk augmente. Donc ln⁡a≈2k(ak−1).\ln a \approx 2^k\left(a_k - 1\right).

8.3 Le calcul de ln⁡2\ln 2

Avec a=2a = 2 (valeurs arrondies) :

kk 00 11 22 33 55 1010 2020
aka_k 22 1,414 2141{,}414\,214 1,189 2071{,}189\,207 1,090 5081{,}090\,508 1,021 8971{,}021\,897 1,000 6771{,}000\,677 1,000 000 6611{,}000\,000\,661
2k(ak−1)2^k\left(a_k - 1\right) 11 0,828 4270{,}828\,427 0,756 8280{,}756\,828 0,724 0620{,}724\,062 0,700 7090{,}700\,709 0,693 3820{,}693\,382 0,693 1470{,}693\,147

La calculatrice donne ln⁡2≈0,693 147\ln 2 \approx 0{,}693\,147. Au chapitre 2, ln⁡2\ln 2 figurait parmi les valeurs approchées citées par le programme : la voici.

8.4 En Python

from math import sqrt

def briggs(a, k):
    for i in range(k):
        a = sqrt(a)
    return 2**k * (a - 1)

briggs(2, 20) renvoie 0.6931474097073078. La boucle for extrait kk racines carrées successives, puis la fonction renvoie 2k(ak−1)2^k\left(a_k - 1\right).

Attention aux arrondis. L'ordinateur calcule avec environ 1616 chiffres significatifs. Si kk est trop grand, aka_k est si proche de 11 que ak−1a_k - 1 perd presque tous ses chiffres exacts : briggs(2, 60) renvoie 0.0. Pour ln⁡2\ln 2, k=20k = 20 donne déjà six décimales exactes.

8.5 Un encadrement

D'après la leçon 4, 1−1x≤ln⁡x≤x−11 - \frac1x \leq \ln x \leq x - 1 pour tout x>0x > 0. Avec x=akx = a_k, puis en multipliant par 2k>02^k > 0 : 2k(1−1ak)≤ln⁡a≤2k(ak−1).2^k\left(1 - \frac1{a_k}\right) \leq \ln a \leq 2^k\left(a_k - 1\right). Pour a=2a = 2 et k=20k = 20 : 0,693 146 9≤ln⁡2≤0,693 147 50{,}693\,146\,9 \leq \ln 2 \leq 0{,}693\,147\,5. L'algorithme donne donc ln⁡2≈0,693 147\ln 2 \approx 0{,}693\,147 à 10−610^{-6} près, et la valeur 2k(ak−1)2^k\left(a_k - 1\right) est toujours une valeur approchée par excès.

Pourquoi la méthode converge (pour aller plus loin). Avec h=ln⁡a2kh = \frac{\ln a}{2^k}, qui tend vers 00 : 2k(ak−1)=ln⁡a×eh−1h2^k\left(a_k - 1\right) = \ln a \times \dfrac{\mathrm{e}^h - 1}{h}, et eh−1h\dfrac{\mathrm{e}^h - 1}{h} tend vers le nombre dérivé de l'exponentielle en 00, qui vaut 11.

Lire le cours complet du chapitre

Exercices 15 et 16

  • Exercice 15 : Briggs à la calculatrice
  • Exercice 16 : Briggs en Python

Exercices du chapitre (PDF, 141 Ko)

Corrigés

Cherche d'abord les exercices sur ta feuille, puis compare avec le corrigé détaillé.

Corrigés du chapitre (PDF, 164 Ko)

Tu es hors connexion. Les chapitres téléchargés restent disponibles dans Hors connexion.