|
CODAGE DES NOMBRES dans les ordinateurs Comment indiquer un très grand nombre (ou un très petit) à un ordinateur, par exemple ? Pour un traitement numérique, d'une manière générale. Comment réaliser des opérations avec de tels
nombres? Le seul but de cette page
est de vous donner quelques principes. Si vous devez pratiquer le codage en
virgule flottante, référez-vous à la norme prévue pour
votre application. |
|
||
Entier |
Prenons l'exemple d'un
ordinateur qui réserverait 16 bits
pour coder un nombre.
Une succession de 16 chiffres (bits) tous à 1, convertis en décimal donnerait: 1111 1111 1111 1111
Base 2 = 65
535 Base 10 = 216 – 1. En règle générale, le plus grand nombre que l'on peut
coder avec n
bits est: 2n – 1. |
|
Codage |
Le bit à droite est dit de poids
faible (LSB: least significant bit); |
|
Positif et négatif |
Les nombres positifs
sont codés normalement; tandis que les nombres négatifs sont codés selon leur
complément à deux.
En pratique, voici ce qu'il faut faire
avec 21 par exemple: coder, inverser, ajouter 1. Pour passer du négatif au
positif: inverser et ajouter 1. Voir Explications plus détaillées |
|
|
||
Nous connaissons la notation
scientifique qui normalise tous les nombres décimaux avec une mantisse
comprise entre 1 et 9,999… et une puissance de dix restituant la grandeur du
nombre.
Nous connaissons également la limitation des nombres codés en binaire sur un certain nombre de bits.
Que faire si le nombre à coder dépasse? Pourquoi ne pas se diriger vers une
sorte de notation scientifique pour binaire: c'est le format flottant. |
Exemples 300
000 = 0,3 106 0,3
est la
mantisse (ou significande) 6 est l'exposant. Avec
16 bits, codage des nombres de
- 32 768 à 32 767 La notation est dite flottante
car elle consiste à faire glisser les nombres significatifs à droite ou à
gauche de sorte que le nombre tienne dans le format. |
|
La notation flottante comprend trois composantes: le signe le significande (aussi appelé mantisse), et l'exposant de la puissance de 2. Le significande est exprimé en binaire complémenté à deux pour les nombres négatifs. |
Le nombre
0 est représenté par tous les bits à 0. Un décalage
du nombre vers la gauche correspond à une multiplication par 2 du nombre; et
vers la droite, à une division par 2. La
normalisation consiste à décaler le nombre jusqu'à obtenir un significande compris
entre 1/2 et 1. De sorte que le premier bit est toujours égal à 1. Pas besoin
de le mémoriser. Il est implicite. |
|
Les nombres décimaux
convertis en binaire peuvent conduire
à des surprises. Alors méfiance!
Erreurs d'arrondis qui peuvent se propager lors de
longs calculs. |
Après calculs divers un 3 peut
se retrouver sous la forme 2,9999991. |
|
|
|
Nombre 12 en binaire flottant Notez qu'il s'agit
d'un exemple de codage. Si vous devez effectuer un codage, référez vous aux
normes en vigueur dans le cadre de vos applications. Ici, par exemple, la
norme indique d'ajouter 3 aux exposants pour 8 bits. Pour un codage sur 32
bits la norme exige d'ajouter 8. Voir
les sites en références |
|
Nombre –12 en binaire flottant: deux façons de
coder le négatif |
Voir Complément
à deux
|
|
En
décimal, le plus grand nombre vaut: (2128 – 2104) = 340 282 346 638 528
859 811 704 183 484 516 925 440,0 Pour compléments d'informations sur le codage voir le site IEEE
floating-point representations of real numbers |
Voir Pi / Zéro
/ infini / Grands
nombres
|
||||
Notations |
|
|
|
|
|
Formelle |
Flottant |
Classique |
|
Soit deux
nombres à ajouter |
x, y |
0,912 345 E5 0,512 345 E2 |
91
234, 5 51,
2345 |
|
et le
résultat cherché |
z
= x + y |
|
91
234, 5 + 51, 2345 91
285, 7345 |
|
Les
mantisses |
fx,
fy, fz |
fx
= 0,912 345 fy
= 0,512 345 |
|
|
Les
exposants |
Ex,
Ey, Ez |
Ex
= 5 Ey
= 2 |
|
|
Algorithme |
||||
Prendre le
plus grand des exposants Supposons Ex
Ey |
Ez
= Ex |
Ez
= 5 |
|
|
Cadrer avec
le même exposant =>
Décaler le plus petit de |
Ex
– Ey |
Ex
– Ey = 3 fy = 0,000 512 345 |
|
|
Ajouter |
fz
= fx + fy |
fx = 0,912 345 fy = 0,000 512 345 fz = 0,912 857 345 |
|
|
Si fz
est plus grand que 1 en valeur absolue =>
décaler fz de 1 cran vers la gauche et augmenter Ez de
1 |
|
|
|
|
Soit la
somme cherchée |
z = fz Ez |
z
= 0,912 857 E5 |
91
285,7 |
|
|
||||
Notations |
|
|
|
|
|
Formelle |
Flottant |
Classique |
|
Soit deux
nombres à soustraire |
x,
y |
0,999
658 E-3 E-3 |
|
|
et le
résultat cherché |
z
= x - y |
|
0,000
999 658 0,000
994 576 0,000
005 082 |
|
Les
mantisses |
fx,
fy, fz |
fx
= 0,999 658 fy
= 0,994 576 |
|
|
Les
exposants |
Ex,
Ey, Ez |
Ex
= -3 Ey
= -3 |
|
|
Algorithme |
||||
Prendre le
plus grand des exposants Supposons Ex
Ey |
Ez
= Ex |
Ez
= -3 |
|
|
Cadrer
avec le même exposant => Décaler
le plus petit de |
Ex
– Ey |
Ex
– Ey = 0 fy = 0,994 576 |
|
|
Ajouter |
fz
= fx + fy |
fx = 0,999 658 fy = 0,994 576 fz = 0,005 082 |
|
|
Si fz
est plus petit que 0,1 =>
décaler fz de n crans vers la gauche et augmenter Ez de
n |
|
fz
= 0,508 2 Ez
= -5 |
|
|
Soit la
somme cherchée |
z = fz Ez |
z
= 0,508 2 E-5 |
0,000
005 082 |
|
|
||||
Notations |
|
|
|
|
|
Formelle |
Flottant |
Classique |
|
Soit deux
nombres à multiplier |
x, y |
0,2 E4 0,4 E-2 |
2000
= 2 103 0,004
= 4 10-3 |
|
Algorithme |
||||
Multiplier
les mantisses |
fz
= fx . fy |
0,2
x 0,4 = 0, 08 |
|
|
Ajouter
les exposants |
Ez
= Ex + Ey |
4
+ (-2) = 2 |
|
|
Valeur du
produit cherché |
z = fz Ez |
0,08 E2 |
|
|
Normalisation |
|
0,8 E1 |
0,8
101 = 8 |
|
|
||||
Notations |
|
|
|
|
|
Formelle |
Flottant |
Classique |
|
Soit deux
nombres à diviser |
x,
y |
0,886
E-5 0,2
E-3 |
0,886
10-5 0,2
10-3 |
|
Algorithme |
||||
Diviser
les mantisses |
fz
= fx / fy |
0,886
/ 0,2 = 4,43 |
|
|
Soustraire
les exposants |
Ez
= Ex - Ey |
-5
- (-3) = - 2 |
|
|
Valeur du
quotient cherché |
z = fz Ez |
4,43 E-2 |
|
|
Normalisation |
|
0,443 E-1 |
4,43
10-2 |
|
|
||||
Algorithmes – Instructions |
Calculs – Opérations |
|||
Ips |
Instructions par seconde |
Ops |
Opérations par secondes. |
|
Flops |
Opérations flottantes par secondes (floating operations per second). |
|||
Mips |
Méga (Million) Instructions par
seconde |
Mops Mflops Gops Gflops |
Méga et Giga opérations flottantes ou non
par secondes. |
|
Voir Puissance
de calcul des ordinateurs / Loi de Moore
et performances actuelles des micropocesseurs
Suite |
|
Voir |
|
La représentation
en virgule flottante - Par
Jean-Michel JOLION de l'INSA
Cours
sur la virgule flottante (pdf) de Alain Guyot (pour ceux qui veulent
approfondir)
Floating-point numbers or Why don’t my numbers add up - Simple à l'américaine |
|
Cette page |
http://villemin.gerard.free.fr/Wwwgvmm/Numerati/FixeFlot.htm |