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 :
La seconde vient du développement de , dans lequel les termes de rang pair s’annulent, pris en puisque :
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
| Termes | Série alternée | Série accélérée |
|---|---|---|
Lisez les deux colonnes comme deux langues différentes.
À gauche, l’erreur est divisée par quand on multiplie le nombre de termes par : elle vaut à peu près , et il faut donc dix fois plus de travail pour gagner un seul chiffre. Après mille termes, l’erreur dépasse encore , ce qui veut dire qu’on n’a même pas quatre décimales sûres. Il faut un million de termes pour arriver à , 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 à chaque terme ajouté, parce que chaque terme porte un facteur de plus que le précédent. Un terme, une décimale, sans négociation : les valeurs le montrent, l’erreur passe de à en douze pas. Les douze termes donnent bien douze décimales exactes ; le douzième terme amène l’erreur à , juste sous le seuil de qu’exige un arrondi correct au douzième rang. Le voici, comparé à la cible :
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 , 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 à . La voici prolongée, exposants négatifs compris, jusqu’à .
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 , et les trois règles qu’elle met en scène sont celles du paragraphe 2 du cours, restreintes aux puissances entières de .
Trois usages, sur la table élargie
Multiplier, en additionnant. Pour calculer , on lit les deux exposants dans la ligne du haut, et , on les additionne, , et on lit le résultat en face de :
Une multiplication de deux nombres à quatre et trois chiffres est devenue l’addition . 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 , on soustrait : , et la colonne donne
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 .
Extraire une racine, en prenant la moitié. Pour , on lit , on divise l’exposant par , et on lit en face de :
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 à 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 , pour tous les
Dernière promesse. L’exercice 31, Le premier chiffre du géant, établit que si avec entier et , alors compte chiffres et commence par le chiffre . 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.
| Chiffres de | Premier chiffre | Début de l’écriture décimale | |
|---|---|---|---|
La ligne est vérifiable de deux façons, et il faut le faire au moins une fois : le script annonce chiffres et une tête de , et le calcul exact, que Python mène sans broncher sur les grands entiers, donne
soit exactement multiplié par . 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 , 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 est calculée à partir d’un approché, et l’erreur commise sur est de l’ordre de fois l’erreur sur : pour de l’ordre de , une approximation à près donne un connu à 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 fausse le total d’une unité, et il faut aller à neuf décimales, , pour retomber sur les chiffres annoncés.
Enfin, le script accepte n’importe quelle base : tete(3, 1000) répond chiffres et une tête de , et le calcul exact confirme, . 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.