Terminale · F3
terminale
Aller plus loin · Scripts

Les sorties de l'Atelier

Les trois livraisons promises à la dernière page de l'Atelier : le duel chronométré des deux séries pour ln 2, la table de Stifel complète, exposants négatifs compris, jusqu'à 2 puissance 20, et le script qui donne le premier chiffre de 2 puissance n pour tous les n que vous voudrez.

L’Atelier du chapitre s’est refermé sur trois promesses. Les voici tenues, dans l’ordre. Tous les nombres de cette page ont été recalculés, les sommes de séries en arithmétique décimale à soixante chiffres afin qu’aucune erreur d’arrondi ne vienne polluer la mesure de l’erreur.

I. Le duel des deux séries

L’exercice 30, Les deux routes, chronométrées, oppose deux formules qui calculent le même nombre.

La première est la série de Mercator (1668), prise en x=1x = 1 :

ln⁡2=1−12+13−14+15−⋯\ln 2 = 1 - \frac12 + \frac13 - \frac14 + \frac15 - \cdots

La seconde vient du développement de ln⁡1+x1−x\ln \frac{1+x}{1-x}, dans lequel les termes de rang pair s’annulent, pris en x=13x = \frac13 puisque 1+1/31−1/3=2\frac{1 + 1/3}{1 - 1/3} = 2 :

ln⁡2=2(13+13⋅133+15⋅135+17⋅137+⋯ ).\ln 2 = 2\left( \frac13 + \frac{1}{3}\cdot\frac{1}{3^{3}} + \frac{1}{5}\cdot\frac{1}{3^{5}} + \frac{1}{7}\cdot\frac{1}{3^{7}} + \cdots \right).

Les deux sont exactes. Une seule calcule.

Les scripts

from decimal import Decimal, getcontext

getcontext().prec = 60


def alternee(N):
    """Somme des N premiers termes de 1 - 1/2 + 1/3 - ..."""
    s = Decimal(0)
    for k in range(1, N + 1):
        s += Decimal((-1) ** (k + 1)) / Decimal(k)
    return s


def acceleree(N):
    """Somme des N premiers termes de 2 * (x + x^3/3 + x^5/5 + ...) en x = 1/3."""
    x = Decimal(1) / Decimal(3)
    s = Decimal(0)
    for k in range(N):
        s += x ** (2 * k + 1) / Decimal(2 * k + 1)
    return 2 * s


LN2 = Decimal("0.693147180559945309417232121458176568075500134360255254120680")

for N in (1, 2, 3, 4, 5, 6, 8, 10, 12):
    print(N, abs(alternee(N) - LN2), abs(acceleree(N) - LN2))

Le tableau d’erreurs

TermesSérie alternéeSérie accélérée
113,07×10−13{,}07 \times 10^{-1}2,65×10−22{,}65 \times 10^{-2}
221,93×10−11{,}93 \times 10^{-1}1,79×10−31{,}79 \times 10^{-3}
331,40×10−11{,}40 \times 10^{-1}1,43×10−41{,}43 \times 10^{-4}
441,10×10−11{,}10 \times 10^{-1}1,24×10−51{,}24 \times 10^{-5}
559,02×10−29{,}02 \times 10^{-2}1,13×10−61{,}13 \times 10^{-6}
667,65×10−27{,}65 \times 10^{-2}1,07×10−71{,}07 \times 10^{-7}
885,86×10−25{,}86 \times 10^{-2}1,01×10−91{,}01 \times 10^{-9}
10104,75×10−24{,}75 \times 10^{-2}1,01×10−111{,}01 \times 10^{-11}
12123,99×10−23{,}99 \times 10^{-2}1,05×10−131{,}05 \times 10^{-13}
1001004,98×10−34{,}98 \times 10^{-3}
1 0001\,0005,00×10−45{,}00 \times 10^{-4}
10610^{6}5,00×10−75{,}00 \times 10^{-7}

Lisez les deux colonnes comme deux langues différentes.

À gauche, l’erreur est divisée par 1010 quand on multiplie le nombre de termes par 1010 : elle vaut à peu près 12N\frac{1}{2N}, et il faut donc dix fois plus de travail pour gagner un seul chiffre. Après mille termes, l’erreur dépasse encore 10−410^{-4}, ce qui veut dire qu’on n’a même pas quatre décimales sûres. Il faut un million de termes pour arriver à 5×10−75 \times 10^{-7}, c’est-à-dire six décimales, et le compte exact de ce seuil est fait dans la page des tiroirs du numéro 6.

À droite, l’erreur est divisée par 99 à chaque terme ajouté, parce que chaque terme porte un facteur x2=19x^{2} = \frac19 de plus que le précédent. Un terme, une décimale, sans négociation : les valeurs le montrent, l’erreur passe de 10−210^{-2} à 10−1310^{-13} en douze pas. Les douze termes donnent bien douze décimales exactes ; le douzième terme amène l’erreur à 1,05×10−131{,}05 \times 10^{-13}, juste sous le seuil de 5×10−135 \times 10^{-13} qu’exige un arrondi correct au douzième rang. Le voici, comparé à la cible :

12 termes=0,693 147 180 559 84…ln⁡2=0,693 147 180 559 94…\begin{aligned} \text{12 termes} &= 0{,}693\,147\,180\,559\,84\ldots \\ \ln 2 &= 0{,}693\,147\,180\,559\,94\ldots \end{aligned}

Le duel se résume donc à ceci : douze contre deux millions, pour la même précision et la même cible. Ce n’est pas un écart de vitesse, c’est un écart de nature. La série alternée avance par différences d’inverses d’entiers, qui décroissent lentement ; la série accélérée avance par puissances d’un nombre plus petit que 11, qui décroissent géométriquement. Newton, qui construisait ses tables personnelles à la main, employait déjà des combinaisons de ce genre, et pour cause : à la plume, deux millions de termes ne sont pas une lenteur, ce sont plusieurs vies humaines.

II. La table de Stifel, complète

L’exercice 23, La table de Stifel (1544), travaille sur la double ligne imprimée dans l’Arithmetica Integra, arrêtée à 27=1282^{7} = 128. La voici prolongée, exposants négatifs compris, jusqu’à 2202^{20}.

nn2n2^{n}nn2n2^{n}nn2n2^{n}
−3-318\frac1855323213138 1928\,192
−2-214\frac14666464141416 38416\,384
−1-112\frac1277128128151532 76832\,768
001188256256161665 53665\,536
1122995125121717131 072131\,072
224410101 0241\,0241818262 144262\,144
338811112 0482\,0481919524 288524\,288
44161612124 0964\,09620201 048 5761\,048\,576

Michael Stifel, moine augustin devenu prédicateur luthérien, publie cette table à Nuremberg en 1544, soixante-dix ans avant Napier. Il l’accompagne d’une remarque qu’il ne développe pas et dont il ne mesure visiblement pas la portée : la ligne du haut fait par addition ce que la ligne du bas fait par multiplication. En langage moderne, la table est un extrait du graphe de log⁡2\log_2, et les trois règles qu’elle met en scène sont celles du paragraphe 2 du cours, restreintes aux puissances entières de 22.

Trois usages, sur la table élargie

Multiplier, en additionnant. Pour calculer 4 096×1284\,096 \times 128, on lit les deux exposants dans la ligne du haut, 1212 et 77, on les additionne, 12+7=1912 + 7 = 19, et on lit le résultat en face de 1919 :

4 096×128=212×27=219=524 288.4\,096 \times 128 = 2^{12} \times 2^{7} = 2^{19} = 524\,288.

Une multiplication de deux nombres à quatre et trois chiffres est devenue l’addition 12+712 + 7. C’est tout le principe, et c’est ce que trois siècles d’ingénieurs feront ensuite à la règle à calcul.

Diviser, en soustrayant. C’est l’apport des exposants négatifs, qui manquaient aux tables antérieures. Pour 64128\frac{64}{128}, on soustrait : 6−7=−16 - 7 = -1, et la colonne −1-1 donne

64128=26−7=2−1=12.\frac{64}{128} = 2^{6 - 7} = 2^{-1} = \frac12.

Sans la partie gauche de la table, le calcul sortait du tableau et n’avait plus de réponse lisible. Avec elle, la division est une soustraction, y compris quand le quotient est plus petit que 11.

Extraire une racine, en prenant la moitié. Pour 65 536\sqrt{65\,536}, on lit 1616, on divise l’exposant par 22, et on lit en face de 88 :

65 536=216/2=28=256.\sqrt{65\,536} = 2^{16/2} = 2^{8} = 256.

La méthode ne marche que si l’exposant s’y prête, et l’exercice 23 de l’Atelier vous fait toucher la limite du doigt (que demanderait 32\sqrt{32} à la table ?). C’est là que l’échelle de 1544 s’arrête et que le travail de Briggs commence : remplir les trous entre les entiers, en extrayant à la main les racines carrées successives dont le cours a détaillé la mécanique. Stifel avait construit une échelle à barreaux très espacés ; les logarithmes en ont fait une pente continue.

III. Le premier chiffre de 2n2^{n}, pour tous les nn

Dernière promesse. L’exercice 31, Le premier chiffre du géant, établit que si log⁡N=m+f\log N = m + f avec mm entier et f∈[0 ;1[f \in [0\,;1[, alors NN compte m+1m+1 chiffres et commence par le chiffre ⌊10f⌋\lfloor 10^{f} \rfloor. Voici l’outil complet, prêt à recevoir n’importe quel exposant.

import math


def tete(a, n):
    """Nombre de chiffres et premier chiffre de a**n, sans calculer a**n."""
    y = n * math.log10(a)
    m = math.floor(y)
    f = y - m
    return m + 1, math.floor(10 ** f)


for n in (10, 30, 64, 100, 128, 500, 1000, 4253):
    nb, d = tete(2, n)
    print(f"2^{n} : {nb} chiffres, commence par {d}")

Un échantillon de sorties.

nnChiffres de 2n2^{n}Premier chiffreDébut de l’écriture décimale
1010441110241024
30301010111073…1073\ldots
64642020111844…1844\ldots
1001003131111267…1267\ldots
1281283939333402…3402\ldots
500500151151333273…3273\ldots
1 0001\,000302302111071…1071\ldots
4 2534\,2531 2811\,281111907…1907\ldots
136 279 841136\,279\,84141 024 32041\,024\,320888816…8816\ldots

La ligne n=1 000n = 1\,000 est vérifiable de deux façons, et il faut le faire au moins une fois : le script annonce 302302 chiffres et une tête de 11, et le calcul exact, que Python mène sans broncher sur les grands entiers, donne

21 000=107 150 860 718…(302 chiffres),2^{1\,000} = 107\,150\,860\,718\ldots \quad (302 \text{ chiffres}),

soit exactement 10f≈1,071510^{f} \approx 1{,}0715 multiplié par 1030110^{301}. Les deux méthodes concordent, mais elles ne sont pas de même nature : la seconde écrit le nombre, la première le devine à distance.

La dernière ligne du tableau montre pourquoi cette distance est précieuse. Le nombre 2136 279 8412^{136\,279\,841}, dont le record de Mersenne du cours est le voisin immédiat, possède plus de quarante et un millions de chiffres. Aucun tableau, aucune page, aucun écran ne l’affichera jamais en entier ; le logarithme, lui, en donne le premier chiffre et le nombre total de chiffres en deux opérations flottantes.

Il faut simplement savoir jusqu’où on a le droit de la croire. La partie fractionnaire ff est calculée à partir d’un log⁡2\log 2 approché, et l’erreur commise sur ff est de l’ordre de nn fois l’erreur sur log⁡2\log 2 : pour nn de l’ordre de 10810^{8}, une approximation à 10−1610^{-16} près donne un ff connu à 10−810^{-8} près seulement, ce qui reste largement suffisant pour lire le premier chiffre mais ne le serait plus pour en lire dix. C’est l’objet de la question 4 de l’exercice 31, et c’est aussi ce qui explique le piège du comptage de chiffres signalé dans le cours : l’arrondi log⁡2≈0,301 030\log 2 \approx 0{,}301\,030 fausse le total d’une unité, et il faut aller à neuf décimales, log⁡2≈0,301 029 996\log 2 \approx 0{,}301\,029\,996, pour retomber sur les 41 024 32041\,024\,320 chiffres annoncés.

Enfin, le script accepte n’importe quelle base : tete(3, 1000) répond 478478 chiffres et une tête de 11, et le calcul exact confirme, 31 000=1 322 070 819…3^{1\,000} = 1\,322\,070\,819\ldots. C’est la question 3 du même exercice, et elle sert précisément à cela : contrôler la méthode approchée par un calcul qui ne peut pas mentir, avant de la lâcher sur des exposants où plus aucun contrôle n’est possible.

Sources

  • Atelier F3, exercices 23 La table de Stifel (1544), 30 Les deux routes, chronométrées et 31 Le premier chiffre du géant ; Coulisses n°6, pièce 50 ; cours F3, paragraphes 7 et 8.
  • M. Stifel, Arithmetica Integra, Nuremberg, 1544. N. Mercator, Logarithmotechnia, Londres, 1668.
  • Toutes les valeurs ont été recalculées en Python : sommes de séries en arithmétique décimale à soixante chiffres, chiffres de tête et nombres de chiffres contrôlés sur les entiers exacts partout où cela reste possible.
← Retour au chapitre F3