Les nombres

Auteur

Jean-Marc Blanc

On appelle grandeur ou quantité tout ce qui peut être augmenté ou diminué : ainsi l'effectif d'une classe, une somme d'argent, la longueur d'un mur. Pour exprimer une grandeur, il faut, selon les cas, compter les entités qui la composent ou la mesurer, c'est-à-dire comparer cette grandeur à une autre de même espèce prise comme unité. On exprime l'effectif d'une classe en comptant les élèves qui la constituent ; on mesure la longueur d'un mur en cherchant combien ce mur a d'unités de longueur, de mètres par exemple. Pour compter ou mesurer les grandeurs, on se sert des nombres. Un nombre est l'expression d'une grandeur ou d'une quantité.

Dans la phrase « Plusieurs ouvriers ont construit un long mur », les mots « plusieurs » et « long » donnent déjà une idée, mais vague, de quantité ou de grandeur. En disant « Douze ouvriers ont construit un mur de soixante mètres », on a une idée beaucoup plus précise du groupe d'ouvriers et du travail accompli. Douze et soixante sont des nombres.

L'arithmétique est la science des nombres ; son objet est l'étude des nombres, de leurs propriétés et des opérations que l'on peut faire à l'aide des nombres. Comme nous le verrons ci-dessous, on distingue divers types de nombres, les uns étant plutôt destinés à compter des entités, les autres à mesurer des grandeurs.

Les commentaires et les suggestions d'amélioration sont les bienvenus alors, après votre lecture, n'hésitez pas, Commentez.

- Titre : Les nombres

- Auteur : Jean-Marc Blanc

- Parution : 21 décembre 2013

- Mise à jour : 30 juin 2014

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2014 Jean Marc Blanc. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Les ensembles de nombres

- 1-1. Les nombres naturels

- 1-1-1. L'addition

- 1-1-2. La soustraction

- 1-1-3. La multiplication

- 1-1-4. La division

- 1-2. Représentation des nombres naturels

- 1-2-1. Notation binaire

- 1-2-2. Notation octale

- 1-2-3. Notation décimale

- 1-2-4. Notation hexadécimale

- 1-3. Les nombres entiers relatifs

- 1-4. Les nombres rationnels

- 1-5. Les nombres réels

- 1-6. Notations en virgule flottante

- 1-6-1. Notation « scientifique » normalisée

- 1-6-2. Notation « scientifique » non normalisée

- 1-6-3. Notation « ingénieur »

- 1-7. Les nombres complexes

- 2. Le stockage des nombres

- 2-1. Stockage des nombres naturels

- 2-2. Stockage des nombres entiers relatifs

- 2-3. Stockage des nombres réels

- 2-4. Stockage des nombres complexes

- 2-5. Stockage des tableaux

- 3. L'arithmétique de l'ordinateur

- 3-1. Arithmétique des nombres entiers

- 3-2. Arithmétique des nombres réels

- 3-3. Ce qui se passe réellement

- 3-4. Étendue et précision

- 4. Remerciements

1 - Les ensembles de nombres

1-1 - Les nombres naturels

Les nombres naturels (appelés aussi entiers naturels) sont des nombres qui permettent de compter les entités, par exemple, les doigts, les feuilles d'un arbre. Ils ne permettent pas de mesurer des quantités continues comme une longueur, un volume ou une masse. Au départ, on a par exemple des personnes, des animaux, des objets. Un troupeau est constitué de moutons : dans un troupeau, les moutons sont distincts et à peu près identiques. Leurs caractères communs définissent une collection.

L'idée de considérer zéro comme un entier naturel est relativement récente. Elle correspond au cas où le troupeau ne comporte aucun mouton. L'ensemble des entiers naturels incluant zéro sera noté . On peut aussi estimer qu'un troupeau qui ne comporte aucun mouton n'est plus un troupeau. C'est pourquoi on définit l'ensemble des entiers naturels excluant zéro qui sera noté .

1-1-1 - L'addition

L'addition est la plus élémentaire des opérations arithmétiques appliquées à deux entiers naturels. Son résultat est la somme : lorsqu'on rassemble deux troupeaux comportant respectivement et moutons, on obtient un troupeau comportant un nombre de moutons égal à la somme des nombres de moutons des troupeaux initiaux. L'addition est commutative :.

Les troupeaux comportent respectivement 107 et 85 moutons. En les rassemblant, on obtient un troupeau de :

1-1-2 - La soustraction

La soustraction est l'opération inverse de l'addition. Son résultat est la différence : lorsqu'un loup égorge un certain nombre de moutons d'un troupeau, le nombre de moutons restants est égal à la différence entre nombre initial de moutons et le nombre de moutons égorgés . Comme le loup ne peut pas égorger plus de moutons qu'il n'y en a, le résultat reste nécessairement dans l'ensemble . La soustraction n'est pas commutative, car on ne peut pas intervertir l'effectif initial du troupeau et le nombre de moutons égorgés.

Le troupeau comporte initialement 192 moutons. Le loup en égorge 9. Il reste :

1-1-3 - La multiplication

La multiplication est équivalente à une addition itérée. Son résultat est le produit : si le troupeau a été chargé sur un train, chaque wagon étant supposé complètement rempli, le nombre total de moutons est le produit du nombre de wagons et du nombre de moutons par wagon . La multiplication est commutative.

Un troupeau de moutons est chargé sur un train qui comporte 8 wagons pouvant contenir chacun 24 moutons. Le train peut donc transporter :

On pourrait aussi charger ce même troupeau dans 24 remorques pouvant contenir chacune 8 moutons :

1-1-4 - La division

La division est l'opération inverse de la multiplication. Son résultat est le quotient : si on prévoit de charger un troupeau sur un train dont chaque wagon peut embarquer un certain nombre de moutons, le nombre de wagons nécessaires sera le quotient du nombre total de moutons par le nombre de moutons par wagons . Une division par zéro est impossible, car on ne peut pas transporter un troupeau dans un train dont chaque wagon ne peut contenir aucun mouton.

On veut charger un troupeau de 192 moutons sur un train composé de wagons pouvant contenir chacun 24 moutons. On doit donc prévoir :

D'autre part, il peut arriver que la division ne puisse pas se faire exactement. Dans ce cas, le dernier wagon sera incomplètement rempli. Il subsiste donc un reste.

Comme le loup a égorgé 9 moutons, il n'en subsiste plus que 183. On aura donc 7 (le quotient) wagons contenant 24 moutons et un qui n'en contiendra que 15 (le reste) :

Notons enfin que la division n'est pas commutative : diviser le nombre de wagons par le nombre de moutons n'aurait aucun sens.

1-2 - Représentation des nombres naturels

Les chiffres sont des caractères typographiques utilisés pour représenter les nombres. Pour la plupart des usages toutefois, on est amené à définir des quantités d'information plus importantes, regroupant plusieurs chiffres.

Diverses collections de chiffres sont utilisées :

1-2-1 - Notation binaire

Il y a deux chiffres différents :

- 0 : zéro ;

- 1 : un.

La plus petite quantité d'information est le bit, qui est représenté par un 0 ou un 1. En pratique, le bit est optimal pour représenter des grandeurs que l'on appelle binaires, logiques ou booléennes, c'est-à-dire qui ne peuvent prendre que deux valeurs : oui ou non, vrai ou faux, allumé ou éteint, enclenché ou déclenché, etc.

Ainsi, le nombre 951 peut être décomposé en une somme de puissances de 2 :

Il sera donc noté.

1-2-2 - Notation octale

Il y a huit chiffres différents :

- 0 : zéro ;

- 1 : un ;

- 2 : deux ;

- 3 : trois ;

- 4 : quatre ;

- 5 : cinq ;

- 6 : six ;

- 7 : sept.

Ainsi, le nombre 951 peut être décomposé en une somme de puissances de 8 :

Il sera donc noté .

1-2-3 - Notation décimale

Il y a dix chiffres différents :

- 0 : zéro ;

- 1 : un ;

- 2 : deux ;

- 3 : trois ;

- 4 : quatre ;

- 5 : cinq ;

- 6 : six ;

- 7 : sept ;

- 8 : huit ;

- 9 : neuf.

Ainsi, le nombre 951 peut être décomposé en une somme de puissances de 10 :

Il sera donc noté .

1-2-4 - Notation hexadécimale

Il y a seize chiffres différents :

- 0 : zéro ;

- 1 : un ;

- 2 : deux ;

- 3 : trois ;

- 4 : quatre ;

- 5 : cinq ;

- 6 : six ;

- 7 : sept ;

- 8 : huit ;

- 9 : neuf ;

- A : dix ;

- B : onze ;

- C : douze ;

- D : treize ;

- E : quatorze ;

- F : quinze.

Ainsi, le nombre 951 peut être décomposé en une somme de puissances de 16 :

Il sera donc noté .

1-3 - Les nombres entiers relatifs

Si on s'intéresse à la variation annuelle de l'effectif de notre troupeau, celle-ci sera égale, chaque année, à la différence entre le nouveau nombre de moutons et l'ancien . Si, d'une année à la suivante, l'effectif du troupeau a augmenté, la différence reste dans l'ensemble . En revanche, si le loup a été particulièrement actif, l'effectif a diminué et la différence n'appartient plus à l'ensemble .

L'ensemble des nombres entiers relatifs est formé des entiers naturels dits entiers relatifs positifs et de leurs opposés appelés entiers relatifs négatifs. Il se note .

Dans un entier relatif, on distingue son signe (+ ou − ) et sa valeur absolue : l'entier relatif −3 a pour valeur absolue 3.

On a relevé l'effectif du troupeau au début de plusieurs années consécutives :

1. 2001 : 174 ;

2. 2002 : 186 ;

3. 2003 : 178 ;

4. 2004 : 188.

Les variations annuelles d'effectif sont donc :

1. durant l'année 2001 :  ;

2. durant l'année 2002 :  ;

3. durant l'année 2003 : .

L'addition est la plus élémentaire des opérations arithmétiques appliquées à deux entiers relatifs. Son résultat est la somme.

Lorsque les deux entiers relatifs sont de même signe, elle s'obtient en additionnant les deux valeurs absolue et en conservant le signe commun.

Lorsque les deux entiers relatifs sont de signes opposés, elle s'obtient en soustrayant la plus petite des deux valeurs absolues de la plus grande, puis en affectant du signe de l'entier ayant la plus grande valeur absolue.

La soustraction est l'opération inverse de l'addition. Son résultat est la différence. Elle est égale à la somme du premier nombre et de l'opposé du second.

La multiplication est équivalente à une addition itérée. Son résultat est le produit. Sa valeur absolue est égale au produit des valeurs absolues des deux arguments. Son signe est + si les deux arguments sont de même signe et − s'ils sont de signes opposés.

La division est l'opération inverse de la multiplication. Son résultat est le quotient. Sa valeur absolue est égale au quotient des valeurs absolues des deux arguments. Son signe est + si les deux arguments sont de même signe et − s'ils sont de signes opposés.

Une division par zéro est impossible. D'autre part, il peut arriver que le quotient n'appartienne plus à l'ensemble .

1-4 - Les nombres rationnels

Un nombre rationnel est un nombre qui peut être exprimé par le quotient de deux entiers relatifs, éléments de , dont le second est non nul. L'ensemble des nombres rationnels est noté .

Un nombre rationnel peut être exprimé par une fraction, par la somme d'un entier et d'une fraction dont le dénominateur est supérieur au numérateur ou à l'aide de chiffres placés à gauche et à droite d'une virgule (ou un point dans la littérature anglo-saxonne).

Quelle que soit la base choisie (notation décimale, binaire, etc.), la séquence des chiffres placés à droite de la virgule devient toujours périodique lorsqu'on s'éloigne suffisamment de celle-ci.

Cas échéant, on indique la période en la surmontant d'un trait horizontal.

1-5 - Les nombres réels

Un nombre irrationnel est un nombre qui ne peut pas être exprimé par le quotient de deux entiers relatifs. En conséquence, il ne peut pas être écrit avec un nombre fini de chiffres à droite de la virgule. Il existe deux types de nombres irrationnels :

1. les nombres algébriques racines d'un polynôme à coefficients rationnels non nuls, comme la racine carrée de 2, et plus généralement tout nombre où est un nombre rationnel positif qui n'est pas un carré parfait ;

2. les nombres transcendants comme et .

La réunion de l'ensemble des nombres rationnels et de celui des nombres irrationnels forme l'ensemble des nombres réels noté

En ajoutant de plus en plus de chiffres après la virgule, il est possible de construire une suite de nombres rationnels qui tend indéfiniment vers un nombre réel donné, mais sans jamais l'atteindre. La recherche d'un nombre rationnel aussi proche que possible est un problème très ancien : le numéro 7289 de la Yale Babylonian Collection ou YBC 7289 est une tablette d'argile babylonienne, écrite en cunéiforme et datée du premier tiers du IIè millénaire av. J.-C. (env. −1700). On ne connaît pas son origine exacte ; elle provient sans doute du sud de l'Irak actuel. Elle est actuellement conservée à l'Université de Yale. Son intérêt réside dans le fait qu'elle est la plus ancienne représentation connue de la racine carrée de deux, notée

Cette tablette a la forme d'un disque d'environ 8 cm de diamètre et 8 mm d'épaisseur. Sa forme et ses dimensions laissent supposer qu'elle a été utilisée par un apprenti scribe pour résoudre un exercice.

Une face représente un carré et ses diagonales. À l'intérieur, le long d'une diagonale, se trouvent deux séries de chiffres.

Figure 1.1 - La tablette YBC 7289

La suite 1 ; 24 ; 51 ; 10 peut-être interprétée comme :

ce qui est très proche de :

La suite 42 ; 25 ; 35 représente l'inverse de la précédente ; elle peut-être interprétée comme :

ce qui est très proche de :

Sur un côté de ce carré, on peut lire le chiffre qui signifie 30 dans le système hexadécimal babylonien. Ce système ne permet pas de connaître la valeur exacte d'un nombre, mais seulement celle-ci à une puissance de 60 près. Ainsi 30 peut-il signifier comme , ou , etc. Une hypothèse est que le 30 qui apparaît sur le côté du carré signifie :

c'est-à-dire le quotient des deux valeurs précédentes.

1-6 - Notations en virgule flottante

Les nombres réels sont souvent représentés par deux groupes de chiffres, l'un à gauche et l'autre à droite de la virgule. Cette manière n'est pas toujours commode lorsqu'il s'agit d'écrire des nombres très grands ou très petits. C'est pourquoi on recourt volontiers à l'artifice de la virgule flottante : on divise le nombre par une puissance de 10 pour amener la virgule à proximité des chiffres significatifs et on le multiplie par la même puissance de 10 pour le ramener à sa valeur initiale.

1-6-1 - Notation « scientifique » normalisée

On divise le nombre par la puissance de 10 qui amène la virgule immédiatement à la gauche des chiffres significatifs et on le multiplie par la même puissance de 10 pour le ramener à sa valeur initiale :

1-6-2 - Notation « scientifique » non normalisée

On divise le nombre par une puissance quelconque de 10 qui déplace la virgule d'un certain nombre de positions et on le multiplie par la même puissance de 10 pour le ramener à sa valeur initiale :

1-6-3 - Notation « ingénieur »

On divise le nombre par la puissance de 1000 qui amène la virgule immédiatement à la droite d'un premier groupe d'un, deux ou trois chiffres significatifs et on le multiplie par la même puissance de 1000 pour le ramener à sa valeur initiale :

1-7 - Les nombres complexes

Comme les ensembles de nombres dont on dispose (naturels, entiers relatifs, rationnels, réels) ne permettent pas de faire tout ce que l'on veut (ou doit), il faut en inventer d'autres.

Considérons les puissances successives du nombre −1 :

Elles sont représentées sur ce qu'on appelle l'axe réel.

Figure 1.2 - Représentation des puissances entières de -1

Que se passe-t-il si l'exposant n'est pas un nombre entier, mais n'importe quel nombre réel ? On doit imaginer quel est le chemin que parcourt lorsque passe d'un entier au suivant. Considérons donc la suite . Les points correspondants naviguent entre 1 et -1. Mais, par où passent-ils ? On a décidé arbitrairement de placer leurs positions successives sur un cercle de rayon égal à 1 et centré à l'origine.

Figure 1.3 - Représentation d'une suite de puissances de -1

Si (−1) était remplacé par une valeur plus négative, par exemple (−2), le cercle serait remplacé par une spirale logarithmique croissante.

Figure 1.4 - Représentation d'une suite de puissances de −2

En revanche, si (−1) était remplacé par une valeur moins négative, par exemple (−0,5), le cercle serait remplacé par une spirale logarithmique décroissante.

Figure 1.5 - Représentation d'une suite de puissances de −0,5

Les diverses valeurs dont la représentation graphique se fait par des points qui ne se trouvent plus seulement sur l'axe réel sont appelées nombres complexes. Le plan sur lequel elles sont représentées est appelé le plan complexe. En plus de l'axe réel, on a un second axe appelé axe imaginaire, sur lequel se trouve le point correspondant à .

Pour indiquer qu'un nombre est complexe, on utilise comme symbole une lettre soulignée, par exemple . La position du point représentant le nombre complexe peut être exprimée de deux manières, à savoir en coordonnées polaires ou en coordonnées cartésiennes.

1. Coordonnées polaires : La distance entre le point 0 (origine) et le point représentant le nombre complexe est appelée module ; elle est notée z, |z| ou . L'angle entre l'axe réel et la droite qui relie le point 0 et le point représentant le nombre complexe est appelé argument ; il est noté .

2. Coordonnées cartésiennes : la distance entre le point 0 et la projection du point représentant le nombre complexe sur l'axe réel est appelée partie réelle de  : elle est notée . La distance entre le point 0 et la projection du point représentant le nombre complexe sur l'axe imaginaire est appelée partie imaginaire de  : elle est notée .

Pour simplifier l'écriture, on a tout d'abord appelé l'unité sur l'axe imaginaire, 1 étant l'unité sur l'axe réel. Par la suite, dans le domaine de l'électrotechnique, on a préféré utiliser la lettre pour éviter toute confusion avec le symbole du courant. Ainsi, si on a défini :

alors un nombre complexe peut s'écrire

Figure 1.6 - Représentation dans le plan complexe

Les deux types de coordonnées sont liés par les relations :

et, en sens inverse :

2 - Le stockage des nombres

2-1 - Stockage des nombres naturels

Le contenu d'un octet peut prendre 256 = 2^8 valeurs différentes. L'étendue d'une variable stockée sur un octet est l'ensemble des valeurs qu'elle peut prendre. Pour un nombre naturel stocké sur un octet, c'est un sous-ensemble de l'ensemble des nombres naturels , à savoir l'intervalle fermé .

On peut grouper plusieurs octets pour stocker des variables ayant une plus grande étendue.

Le processeur Intel Pentium peut traiter des nombres naturels stockés sur 1, 2, 4 et 8 octets (tableau 2.1). Le C définit les mêmes types de nombres naturels sous d'autres noms. Le Fortran n'offre pas de types de variables spécifiques pour les nombres naturels.

Pentium

C

Octets

Bits

Borne

byte unsigned integer

unsigned char

1

8

2^8 − 1

word unsigned integer

unsigned short

2

16

2^16 − 1

unsigned int

doubleword unsigned integer

unsigned long

4

32

2^32 − 1

quadword unsigned integer

unsigned long long

8

64

2^64 − 1

Table 2.1 - Types de nombres naturels dans le processeur Intel Pentium et en C

2-2 - Stockage des nombres entiers relatifs

Pour le calcul numérique, on utilise plus souvent des entiers signés, dont l'étendue est un sous-ensemble de l'ensemble des nombres entiers . Dans un octet qui contient un nombre entier signé, le premier bit est utilisé pour le signe. S'il vaut 0, le nombre est positif et sa valeur est contenue dans les 7 autres. S'il vaut 1, le nombre est négatif et les 7 autres contiennent sa valeur augmentée de 128 (tableau 2.2).

Table 2.2 - Entier sur 1 octet avec signe et complément

Le processeur Intel Pentium peut traiter des nombres entiers relatifs stockés sur 1, 2, 4 et 8 octets (tableau 2.3). Le C et le Fortran définissent les mêmes types de nombres naturels sous d'autres noms.

Pentium

C

Fortran

Octets

Bits

Borne

byte signed integer

char

Integer*1

1

8

±(2^7 − 1)

word signed integer

short

Integer*2

2

16

±(2^16 − 1)

int

doubleword signed integer

long

Integer*4

4

32

±(2^31 − 1)

quadword signed integer

long long

Integer*8

8

64

±(2^63 − 1)

Table 2.3 - Types de nombres naturels dans le processeur Intel Pentium, en C et en Fortran

Ici se pose la question de l'ordre dans lequel ces octets sont rangés en mémoire. Deux possibilités peuvent être envisagées.

1. Dans le système petit à la fin (en anglais : little endian), l'adresse du mot correspond à l'adresse de l'octet qui contient le signe et les bits les plus significatifs. Les bits les moins significatifs sont stockés dans les octets suivants (tableau 2.4).

Table 2.4 - Entier sur 2 octets, petit à la fin

2. Dans le système grand à la fin (en anglais : big endian), l'adresse du mot correspond à l'adresse de l'octet qui contient les bits les moins significatifs. Le signe et les bits les plus significatifs sont stockés dans les octets suivants (tableau 2.5).

Table 2.5 - Entier sur 2 octets, grand à la fin

Il n'est pas nécessaire de prendre garde à cette différence tant qu'on ne travaille que sur un seul type d'ordinateur. En revanche, si l'on veut transférer des données d'un type d'ordinateur à un autre, par exemple d'un ordinateur personnel à un superordinateur ou vice-versa, il faudra peut-être réordonner les octets.

2-3 - Stockage des nombres réels

Les nombres réels sont des nombres qui peuvent comporter une virgule. Ils sont utilisés pour tout ce qui se mesure, par opposition à ce qui se compte. Dans les ordinateurs personnels, ils sont stockés sur 4, 8 ou 10 octets (32, 64 ou 80 bits). En Fortran, les deux premiers types sont déclarés respectivement comme Real*4 et Real*8. Le stockage sur 80 bits n'est utilisé que dans les registres internes du processeur.

Les nombres sont stockés en virgule flottante, c'est-à-dire sous la forme :

1. s est le signe, représenté par un seul bit, les 31, 63 ou 79 autres étant utilisés pour la valeur absolue du nombre (le complément n'est pas utilisé ici).

2. m est la mantisse, c'est-à-dire un nombre inférieur à 1.0. On dit que le nombre est normalisé lorsque sa mantisse est comprise dans l'intervalle .

3. e − d est l'exposant dont seule la partie e est stockée, alors que le décalage d est une constante caractéristique du type de variables. Cet artifice permet d'avoir des exposants négatifs tout en ne stockant que des valeurs positives de e.

La représentation des nombres réels dans des mots de 4 et 8 octets (32 et 64 bits) fait l'objet de la norme ANSI/IEEE Std 754-1985 (IEEE Standard for Binary Floating-Point Numbers), reprise par la suite par la CEI et l'ISO (tableau 2.6 et figure 2.1).

Type

bit pour s

bits pour e

d

bits pour m

Real*4

1

8

126

23 (+1)

Real*8

1

11

1022

52 (+1)

Table 2.6 - Nombres de bits selon ANSI/IEEE Std 754-1985

La mention (+1) pour le nombre de bits réservés à la mantisse m appelle quelques explications : si le nombre est normalisé, sa mantisse est dans l'intervalle [ 0.5 ; 1.0 [ , son chiffre le plus significatif est obligatoirement un 1. On peut omettre de le mémoriser, c'est ce qu'on appelle le bit caché. Grâce à cette astuce, un champ de 23 ou 52 bits permet de stocker une mantisse dont on connaît 24 ou 53 bits.

Figure 2.1 - Répartition des bits selon ANSI/IEEE Std 754-1985

Figure 2.2 - Représentation interne de quelques nombres réels

2-4 - Stockage des nombres complexes

Certains langages permettent de définir des variables comme complexes, et surtout, de généraliser l'utilisation des opérateurs arithmétiques aux nombres complexes.

Chaque nombre complexe est stocké comme deux nombres réels, la partie réelle et la partie imaginaire.

1. Une variable de type Complex*8 occupe 8 octets : les 4 premiers pour la partie réelle et les 4 suivants pour la partie imaginaire.

2. Une variable de type Complex*16 occupe 16 octets : les 8 premiers pour la partie réelle et les 8 suivants pour la partie imaginaire.

2-5 - Stockage des tableaux

Le stockage des tableaux à plus d'un indice peut aussi donner lieu à des difficultés, car les différents langages ne procèdent pas de la même manière. En Fortran, c'est le premier indice qui varie le plus rapidement. Une matrice est donc stockée par colonnes. En C, c'est l'inverse : le dernier indice varie le plus rapidement. Une matrice est donc stockée par lignes.

Figure 2.3 - Tableau en Fortran

Figure 2.4 - Tableau en C

Il faut être conscient de cette différence lorsqu'on appelle un sous-programme en Fortran depuis un programme principal en C.

3 - L'arithmétique de l'ordinateur

3-1 - Arithmétique des nombres entiers

Avec les nombres entiers, les opérations d'addition, de soustraction et de multiplication donnent des résultats exacts pour autant qu'on ne sorte pas de l'étendue du type de variable considéré. Les dépassements éventuels peuvent conduire à des résultats imprévisibles, qui dépendent d'ailleurs du type de processeur et du langage de programmation. On sait en revanche que le quotient de deux nombres entiers n'est en général pas un nombre entier, élément de , mais un nombre rationnel, élément de . On est donc conduit à définir une nouvelle opération, la division entière :

Ainsi définie, la division entière donne aussi des résultats exacts. Il convient d'être attentif au fait que la multiplication n'est pas l'opération inverse de la division entière :

3-2 - Arithmétique des nombres réels

Pour additionner deux nombres réels x et y (figure 3.1), le processeur commence, si les deux opérandes n'ont pas le même exposant, par dénormaliser le plus petit, c'est-à-dire décaler sa mantisse vers la droite d'un nombre de positions égal à la différence des exposants initiaux et à corriger son exposant en conséquence (figure 3.2).

Il additionne ensuite les mantisses (figure 3.3), ce qui peut faire apparaître sur la gauche un bit excédentaire de retenue.

Figure 3.1 - Les opérandes de x et y

Figure 3.2 - Dénormalisation de y

Figure 3.3 - Addition des mantisses

Pour éliminer ce bit excédentaire à gauche de la mantisse (le plus significatif), le résultat est renormalisé. Il en résulte un bit excédentaire à droite (le moins significatif). Comme, dans cet exemple, ce bit vaut 0, on peut le laisser tomber ou, en d'autres termes, arrondir le résultat sans que cela n'introduise d'erreur (figure 3.4).

Figure 3.4 - Renormalisation de x + y

En revanche, si le bit excédentaire à droite valait 1, le fait de le laisser tomber introduirait une erreur. La norme ANSI/IEEE Std 754-1985 règle le problème de l'arrondi selon trois possibilités .

1. Si le bit excédentaire vaut 0, on le laisse simplement tomber.

2. Si le bit excédentaire vaut 1 et si le bit précédent vaut 0, on arrondit vers le bas : on laisse tomber le bit excédentaire.

3. Si le bit excédentaire et le(s) précédent(s) valent 1, on arrondit vers le haut, avec les retenues qui s'imposent.

3-3 - Ce qui se passe réellement

La méthode d'arrondi préconisée par la norme ANSI/IEEE Std 754-1985 a l'avantage d'éviter le biais qui se produirait si on se contentait de tronquer les résultats, c'est-à-dire de les arrondir systématiquement vers le bas. En revanche, elle ralentit les calculs de manière significative. C'est pourquoi les constructeurs ont fait différents choix en ce qui concerne le respect ou non de la norme.

1. La plupart des stations de travail Unix suivent strictement la norme.

2. Certains superordinateurs privilégient la vitesse de calcul aux dépens de la précision et ne suivent pas la norme, se contentant de tronquer les résultats.

3. Les processeurs Intel et compatibles constituent un cas à part : en interne, les calculs se font sur des registres de 80 bits, les résultats étant tronqués, mais pour les échanges avec la mémoire, les données sont raccourcies à 64 bits et arrondies selon la norme.

3-4 - Étendue et précision

Le processeur considère qu'un nombre est infini lorsque tous les bits de son exposant sont mis à 1, et cela quel que soit le contenu de la mantisse. Le plus grand nombre fini que l'on peut stocker est donc celui dont tous les bits sont égaux à 1 sauf le dernier de l'exposant décalé e (et éventuellement celui de signe).

Figure 3.5 - Plus grands nombres finis possibles

La représentation interne vue plus haut ne fonctionne que lorsque l'exposant e−d est supérieur au décalage d, c'est-à-dire lorsque e est strictement positif. La précision correspond aux nombres de bits de la mantisse (y compris le bit caché). Le plus petit nombre non nul que l'on peut stocker sans perte de précision est donc celui dont tous les bits sont égaux à 0, sauf le premier de la partie visible de la mantisse.

Figure 3.6 - Plus petits nombres non nuls possibles sans perte de précision

Il est possible de stocker des nombres encore plus petits, mais dans ce cas, le mode de représentation interne change : l'exposant e − d reste égal au décalage d, car e est nul et ne peut pas devenir négatif. Le bit caché n'est plus utilisé. La partie significative de la mantisse se raccourcit au fur et à mesure que le nombre devient plus petit. Il y a donc perte de précision. Le plus petit nombre non nul que l'on peut stocker avec perte de précision est donc celui dont seul le dernier bit vaut 1.

Remarque : selon le langage de programmation, le compilateur et les options de compilation, il peut arriver que toutes les valeurs trop petites pour être stockées sans perte de précision soient considérées comme véritablement nulles.

Figure 3.7 - Plus petits nombres non nuls possibles avec perte de précision

La notion de précision est fondamentalement différente de ce qui précède. Elle désigne par convention la différence entre le nombre 1.0 et chacun des nombres les plus proches de 1.0 qui puissent encore en être distingués.

Figure 3.8 - Nombres les plus proches de 1.0 vers le haut

Figure 3.9 - Nombres les plus proches de 1.0 vers le bas

4 - Remerciements

Les commentaires et les suggestions d'amélioration sont les bienvenus alors après votre lecture, n'hésitez pas, Commentez .

Nos remerciements à -Nikopol- et à LittleWhite pour leur relecture technique et à ced et à jacques_jean pour leur relecture orthographique.