Représentation des nombres
Cours PLURITAL n°1 du 02/10/2007
Jean-François Perrot
- Développement d'un
nombre
- Introduction,
motivation
- Un petit rappel
d'arithmétique élémentaire
- Utilisation du
développement par rapport à une base pour représenter les nombres.
- Linguistique
- Nommer en
base 10
- Un
vocabulaire infini ?
- Croissance
logarithmique
- Écriture
positionnelle
- Les restes
deviennent des chiffres ...
- ... écrits
de droite à gauche !
- Exemples :
- Commentaire
I. Développement
d'un nombre
-
Introduction,
motivation
Les nombres dont il est ici question sont les entiers positifs ou nuls,
appelés par les mathématiciens les entiers naturels.
Ceux dont Kronecker
disait :
Die ganzen Zahlen hat der liebe Gott gemacht, alles andere
ist Menschenwerk.
Les nombres sont par nature des êtres abstraits.
La question qui se pose est celle de leur représentation concrète
: par écrit, mais aussi par oral (dans le langage parlé).
Peut-on désigner un nombre ? le nommer ?
La réponse est en général non !
À moins de recourir à une périphrase, comme le nombre e
est la base des logarithmes népériens...
(pour d'autres exemples, adressez-vous à votre
mathématicien préféré).
Bon, bien sûr, il y a ces fameux nombres transcendants, mais les
entiers, justement, nous savons les nommer !
Voyons de plus près.
- Rappelons d'abord qu'un nombre est un objet de calcul,
et pas du tout une chaîne de caractères.
Donner un nombre, pour un mathématicien,
c'est donner un procédé permettant de le calculer
(à l'instar du célèbre nombre π, obtenu comme le rapport entre la
longueur d'un cercle et son diamètre...).
Par exemple, l'expression
12 + 16 * (6 + 16 * (10 + 16 * ( 0 + (16 * 13))))
désigne le nombre qui
- s'écrirait ८५४६३५ dans un texte en devanâgari et
٨٥٤٦٣٦ dans un texte en écriture arabe
- se dit en français huit-cent-cinquante-quatre-mille-six-cent-trente-six
(nouvelle
orthographe)
et achthundertvierundfünfzigtausendsechshundertsechsunddreißig
en allemand
- est noté D0A6C en hexadécimal
- etc...
- Mais, pour le commun des mortels, savoir que le nombre
existe ne
suffit pas, on veut le nommer d'une manière
univoque.
Héritiers d'une
longue tradition, nous croyons "naturel" de dire que le nombre
ci-dessus est 854636,
alors qu'il s'agit seulement de son nom usuel dans
notre environnement : suivant le contexte, ce nom peut changer.
Il est utile d'examiner sa structure : savoir comment il est fait (le pourquoi
et le comment).
La question du nom des nombres est à l'étude depuis les origines de
l'humanité [voir dans Wikipédia la série d'articles : Numération].
Cette question prend une importance nouvelle dans le contexte
informatique, ce qui motive cette page.
Notons au passage que la langue anglaise fait une différence lexicale
utile entre number ( = nombre)
et numeral ( = nom de nombre).
-
Nous n'analyserons ici que des procédés utilisant un jeu de symboles
spécifiques (les chiffres) dotés de valeurs numériques a
priori
et permettant d'écrire les nombres comme suites finies de ces symboles.
Plus précisément, nous admettons que si notre jeu de symboles comporte N
chiffres,
les valeurs numériques en question sont 0, 1, 2, ... N-1.
Par exemple, pour N = 16, les valeurs des chiffres
hexadécimaux A, B, C, D, E, F sont 10, 11, 12,
13, 14 et 15.
[Le but de cette restriction est d'écarter les procédés fondés sur
l'attribution de valeurs numériques aux lettres de l'alphabet
comme la gematria
hébraïque et l'abjad
arabe.]
-
Un
petit rappel d'arithmétique élémentaire :
- Étant donné un nombre naturel quelconque k,
on en tire une suite de nombres compris entre 0 et N-1
- en procédant par divisions successives par
N
- en s'arrêtant lorsque le quotient devient nul
- et en prenant à chaque fois le reste de la division.
(rappel dans le rappel : le reste de la division par N
est compris entre 0 et N-1).
Exemple : k = 854636 et N
= 16
854636 = 53414 * 16 + 12
53414 = 3338 * 16 + 6
3338 = 208 * 16 + 10
208 = 13 * 16 + 0
13 = 0 * 16 + 13
La suite des restes en question est donc ici : 12, 6, 10, 0, 13.
- Réciproquement, la donnée de cette suite permet de
retrouver le nombre k en "remontant" la chaîne des
divisions :
854637 = 12 + 16 * (6 + 16 * (10 + 16 * ( 0 + (16* 13)))) = 12 + 16 * 6
+ 162 * 10 + 0 * 163 + 13
* 164
On notera que les deux expressions ci-dessus sont équivalentes du point
de vue de leur valeur (d'où le signe "="),
mais pas du point de vue du coût du calcul de cette valeur :
- la première nécessite seulement 4 multiplications
et 4 additions,
- la seconde y ajoute les calculs des puissances de 16
La première suit le schéma
de Horner, c'est ainsi que procèdent les ordinateurs ;
nous verrons plus loin que la seconde n'est que la traduction en
notation mathématique de l'énoncé ordinaire du nombre
dans une langue comme le français.
- Conclusion : Pour n'importe quel N
supérieur à 1 (pour pouvoir diviser !), il y a donc une correspondance
biunivoque (alias bijection) entre
- d'une part les entiers positifs
- d'autre part les les suites de nombres compris
entre 0 et N-1 dont le dernier terme n'est pas nul.
La clause relative au dernier terme non nul est indispensable pour
assurer l'unicité de la suite.
On dit que N est la base, et la
suite des restes s'appelle le développement du
nombre donné par rapport à cette base.
- Remarque : cette correspondance est
une loi de la
nature, un fait établi par un raisonnement mathématique,
qui n'a en
lui-même aucun rapport avec le besoin qu'ont les hommes de nommer les
nombres.
II.
Utilisation du développement par rapport à une base pour représenter
les nombres.
Cette mise en œuvre se fait à deux niveaux : linguistique et notationnel
-
Linguistique
-
Nommer
en base 10
Notons d'abord que le nom français huit-cent-cinquante-quatre-mille-six-cent-trente-six,
de même que le nom allemand achthundertvierundfünfzigtausendsechshundertsechsunddreißig,
est construit sur le développement en base 10.
En effet, l'un et l'autre ne sont que des lectures plus ou moins
ordonnées de l'expression 8*105+5*104+4*103+6*102+3*101+6*100.
Voyez Numération
pour vous convaincre que ce procédé fort répandu n'est pourtant pas
universel.
-
Un
vocabulaire infini ?
Au-delà des différences de syntaxe - l'allemand dit sechsunddreißig
là où le français dit trente six, etc -
le procédé repose sur une série de noms donnés par la langue aux
puissances de 10 : cent, mille, million, milliard,
etc.
Cette série de noms est organisée de manière plus ou moins régulière
selon les langues
(par exemple le
japonais est plus régulier que les langues européennes, et le
système indien encore plus)
mais elle est finie par nature, alors que la suite
des puissances de 10 à nommer est infinie.
On s'efforce de l'étendre par divers procédés lexicaux (voyez
encore Wikipédia : Echelles
longue et courte et Noms
des grands nombres),
mais clairement ces procédés lexicaux laissent à désirer, et la
solution complète du problème se trouve ailleurs,
dans le système positionnel.
-
Croissance
logarithmique
Même si le procédé linguistique n'est pas vraiment adéquat à l'infinité
des nombres,
et même si les noms de nombres exprimés dans les langues naturelles
tendent à être fort longs par rapport aux mots d'usage courant,
il faut reconnaître que la longueur des noms de nombres ne
croît que très lentement avec la taille du nombre nommé.
En effet, cette longueur est grosso modo
proportionnelle à celle du développement en base 10,
donc au logarithme à base 10 du nombre désigné.
Cette croissance logarithmique de la
représentation par rapport au nombre représenté a une
importance capitale.
C'est elle qui nous permet de manipuler couramment des nombres
suffisamment grands pour nous donner une prise efficace sur le monde.
Dans le cas de l'informatique (voir plus loin), c'est elle qui a permis
l'essor du calcul numérique dès les premiers ordinateurs,
alors que le calcul non-numérique a dû attendre plus de puissance et
plus de mémoire car il ne bénéficie pas de cet avantage
(représenter en mémoire un livre deux fois plus gros qu'un autre prend
deux fois plus de place !).
-
Écriture
positionnelle
Le génie du système positionnel, inventé
par les Indiens (et/ou par les Chinois), transmis à l'Occident par les
Arabes,
consiste à
- observer que seuls les noms des puissances de 10
constituent une série non bornée,
les noms des nombres inférieurs à 10 pouvant être avantageusement
remplacés par des symboles ad hoc, à savoir les
chiffres ;
- éliminer les noms des puissances de 10 en les
remplaçant par la position des
chiffres dans la chaîne écrite :
le chiffre logé à la kème position représentant
le coefficient de la kème puissance de 10.
-
Les
restes (dans la développement arithmétique) deviennent des chiffres ...
Plus généralement, étant donné une base N, si on se
donne un jeu de chiffres pour représenter les entiers 0, 1, 2, ..., N-1,
le développement d'un nombre quelconque selon cette base (la suite des
restes, qui est une suite de nombres)
peut s'écrire comme une suite de chiffres.
Mutation d'une importance capitale !
-
...
écrits de droite à gauche !
Il n'y a plus qu'à décider de la disposition spatiale de cette écriture
(de gauche à droite, de droite à gauche ou de haut en bas ...).
Notre tradition adopte l'ordre de droite à gauche.
Oui, nous écrivons de droite à gauche la suite des chiffres
représentant les restes, suivant l'ordre naturel desdits restes,
à savoir l'ordre dans lequel ils sont produits par l'algorithme des
divisions successives par la base !
Notez que ce choix est
indépendant de l'ordre d'écriture de notre alphabet : les Indiens
écrivent de gauche à droite,
les Arabes de droite à gauche, mais tous
écrivent leurs chiffres de droite à gauche !
Au contraire, l'écriture n'ko, inventée par le
Guinéen Souleymane Kanté pour noter le mandingue, adopte l'ordre de
droite à gauche pour ses lettres
et de gauche à droite pour ses chiffres (cf. la section N'Ko
numerals de http://www.fakoli.net/nko/tutorial/
).
[ L'alphabet n'ko est entré dans Unicode 5.0,
plage x07C0 - x07FF, voyez http://hapax.qc.ca/
et en particulier l'exposé de Patrick Andriès à la 27e conférence Unicode (Berlin) :
tifinaghe et n'ko ]
-
Exemples :
Dans notre exemple ci-dessus, N = 16, le
développement est la suite de nombres (12, 6, 10, 0, 13),
le nombre en question s'écrit donc comme une chaîne de caractères
(chiffres) : D0A6C.
Vous pouvez multiplier les exemples ad libitum sur
les pages que voici :
avec toutefois les limitations suivantes :
- base n'excédant pas 36 (chiffres = de 0 à 9 et de A
à Z),
- nombre d'au plus 15 chiffres décimaux (limitation
due au procédé de calcul en JavaScript).
-
Commentaire
Attention ! Il faut bien comprendre la différence profonde entre une suite
de nombres, objet mathématique, et un mot écrit
avec des
chiffres.
- La suite de nombres existe en elle-même, sans référence
à une quelconque
écriture.
- Le mot écrit ne représente une suite de nombres qu'en
vertu
d'une double convention
- attribuant à chaque chiffre une valeur numérique
- fixant un ordre de lecture des chiffres dans le mot
qui détermine la position de chaque nombre dans la suite.
et ainsi de quelle puissance de la base il est le facteur.
Cela
dit, cette invention géniale qu'est la notation positionnelle est à
présent universellement adoptée, seul le choix de la base varie :
10, ou 16 ou 2.