Floating-point numbers · Nombres en virgule flottante
| English | Français |
|---|---|
| floating-point/ˈfləʊtɪŋ pɔɪnt/ | virgule flottante |
| mantissa/mænˈtɪsə/ | mantisse |
| exponent/ekˈspəʊnənt/ | exposant |
| normalised/ˈnɔːməlaɪzd/ | normalisé |
| precision/prɪˈsɪʒn/ | précision |
| rounding errors/ˈraʊndɪŋ ˈerəz/ | erreurs d'arrondi |
| fixed-point/fɪkst pɔɪnt/ | virgule fixe |
| overflow/ˌəʊvəˈfləʊ/ | débordement |
| underflow/ˌʌndəˈfləʊ/ | sous-débordement |
A missile that missed by 600 metres
- On 25 February 1991 a Patriot battery at Dhahran failed to intercept an incoming missile. Twenty-eight soldiers died.
- The system counted time in tenths of a second, and 0.1 has no exact binary representation: it is a repeating fraction, truncated to the register's width. Each tick lost a fraction of a microsecond.
- After a hundred hours running, the accumulated error was a third of a second, and in a third of a second the target moved 600 metres. The arithmetic was correct at every single step.
- This lesson is the floating-point 浮点 format, normalisation 规格化, and the approximation errors that make cases like this possible.
Un missile qui a manqué de 600 mètres
- Le 25 février 1991, une batterie Patriot à Dhahran a échoué à intercepter un missile entrant. Vingt-huit soldats sont morts.
- Le système comptait le temps en dixièmes de seconde, et 0.1 n'a pas de représentation binaire exacte : il s'agit d'une fraction périodique, tronquée à la largeur du registre. Chaque tick a perdu une fraction de microseconde.
- Après cent heures de fonctionnement, l'erreur accumulée était d'un tiers de seconde, et en un tiers de seconde la cible avait bougé de 600 mètres. L'arithmétique était correcte à chaque étape unique.
- Cette leçon porte sur le format virgule flottante 浮点, la normalisation 规格化, et les erreurs d'approximation qui rendent des cas comme celui-ci possibles.
The format
- To store real numbers of very different sizes, a computer uses a binary form of scientific notation with two fields: a mantissa 尾数, the significant digits, and an exponent 指数, the power of 2 to multiply by. Both are stored as two's complement.
- Read the mantissa as a binary fraction: the first bit after the point is worth $\tfrac12$, the next $\tfrac14$, then $\tfrac18$. So
0.1010000is $\tfrac12 + \tfrac18 = 0.625$. - With exponent
00000010, that is $+2$, the value is $0.625 \times 2^2 = 2.5$.
A fraction and a power of two
Le format
- Pour stocker des nombres réels de tailles très différentes, un ordinateur utilise une forme binaire de notation scientifique avec deux champs : une mantisse 尾数, les chiffres significatifs, et un exposant 指数, la puissance de 2 à multiplier. Les deux sont stockés en complément à deux.
- Lisez la mantisse comme une fraction binaire : le premier bit après la virgule vaut $\tfrac12$, le suivant $\tfrac14$, puis $\tfrac18$. Donc
0.1010000est $\tfrac12 + \tfrac18 = 0.625$. - Avec exposant
00000010, c'est $+2$, la valeur est $0.625 \times 2^2 = 2.5$.

Une fraction et une puissance de deux
Build a floating-point number · Construire un nombre en virgule flottante
Flip the mantissa and exponent bits to make a value, and check whether it is normalised. · Inverser les bits de la mantisse et de l'exposant pour former une valeur, et vérifier si elle est normalisée.
A floating-point number is stored as: · Un nombre en virgule flottante est stocké sous la forme :
value = mantissa × 2^exponent — binary scientific notation, with both parts stored in two's complement. · valeur = mantisse × 2^exposant — notation scientifique binaire, avec les deux parties stockées en complément à deux.
Match each part of floating-point representation to its role. · Reliez chaque partie de la représentation en virgule flottante à son rôle.
value = mantissa × 2^exponent; normalising maximises precision; money uses fixed-point/BCD to avoid rounding. · valeur = mantisse × 2^exposant ; la normalisation maximise la précision ; l'argent utilise la virgule fixe/BCD pour éviter les arrondis.
Worked example: binary to denary
- A number has mantissa
10110000and exponent00000011. Find its denary value. - The exponent is $+3$. The mantissa begins with 1, so it is negative and is read by two's complement rules: as
1.0110000the sign bit is worth $-1$ and the fraction bits add $\tfrac14 + \tfrac18 = 0.375$, so the mantissa is $-1 + 0.375 = -0.625$. - $\text{number} = -0.625 \times 2^3 = -5.0$.
- The commonest error is reading a negative mantissa as if it were positive. Check the first bit before anything else.
Exemple résolu : binaire vers décimal
- Un nombre a une mantisse
10110000et un exposant00000011. Trouvez sa valeur décimale. - L'exposant est $+3$. La mantisse commence par 1, donc elle est négative et est lue selon les règles du complément à deux : comme
1.0110000, le bit de signe vaut $-1$ et les bits de fraction ajoutent $\tfrac14 + \tfrac18 = 0.375$, donc la mantisse est $-1 + 0.375 = -0.625$. - $\text{number} = -0.625 \times 2^3 = -5.0$.
- L'erreur la plus courante est de lire une mantisse négative comme si elle était positive. Vérifiez le premier bit avant tout autre chose.
A floating-point number has mantissa 10110000 and exponent 00000011. What is its denary value? · Un nombre en virgule flottante a une mantisse 10110000 et un exposant 00000011. Quelle est sa valeur décimale ?
The mantissa starts with 1, so it is negative: −1 + 1/4 + 1/8 = −0.625. Times 2^3 gives −5.0. Reading it as positive is the usual error. · La mantisse commence par 1, donc elle est négative : −1 + 1/4 + 1/8 = −0.625. Multiplié par 2^3 donne −5.0. La lire comme positive constitue l'erreur habituelle.
Worked example: denary to binary
- Store $+2.5$ in the same 8-bit mantissa, 8-bit exponent format.
- In binary, $2.5 = 10.1$. Written as a fraction times a power of two: $2.5 = 0.101 \times 2^2$.
- So the mantissa is
01010000, a sign bit of 0 then.101padded with zeros, and the exponent is00000010. - Always write it in the normalised form first; then the two fields read straight off.
Exemple résolu : décimal vers binaire
- Stockez $+2.5$ dans le même format mantisse 8 bits, exposant 8 bits.
- En binaire, $2.5 = 10.1$. Écrit comme une fraction multipliée par une puissance de deux : $2.5 = 0.101 \times 2^2$.
- Donc la mantisse est
01010000, un bit de signe de 0 suivi de.101rempli de zéros, et l'exposant est00000010. - Écrivez toujours d'abord sous forme normalisée ; ensuite les deux champs se lisent directement.
Written as a normalised fraction times a power of two, 2.5 = 0.101 x 2^. Give the exponent. · Écrit sous forme de fraction normalisée multipliée par une puissance de deux, 2.5 = 0.101 x 2^. Donnez l'exposant.
2.5 is 10.1 in binary; sliding the point two places left gives 0.101, so the exponent is 2 and the mantissa is 01010000. · 2.5 est 10.1 en binaire ; décaler la virgule de deux rangs vers la gauche donne 0.101, donc l'exposant est 2 et la mantisse est 01010000.
Normalisation
- A number is normalised when the first significant bit sits immediately after the binary point, so there are no wasted leading zeros. For a positive number the mantissa starts
0.1; for a negative one,1.0. - Why: it maximises precision 精度, because every mantissa bit then carries information rather than a leading zero.
- To normalise, shift the mantissa left and decrease the exponent by the same number of places, or shift right and increase it. The value is unchanged; only its representation is.
Shift the bits, adjust the exponent, keep the value
Normalisation
- Un nombre est normalisé lorsque le premier bit significatif se trouve immédiatement après la virgule binaire, donc il n'y a pas de zéros de tête gaspillés. Pour un nombre positif, la mantisse commence
0.1; pour un négatif,1.0. - Pourquoi : cela maximise la précision 精度, car chaque bit de mantisse transporte alors de l'information plutôt qu'un zéro de tête.
- Pour normaliser, décaler la mantisse vers la gauche et diminuer l'exposant du même nombre de places, ou le décaler vers la droite et l'augmenter. La valeur reste inchangée ; seule sa représentation change.

Déplacer les bits, ajuster l'exposant, conserver la valeur
Trading mantissa bits against exponent bits
- The total number of bits is fixed, so the two fields compete.
- More mantissa bits means greater precision: each value is stored more exactly, with a smaller rounding error.
- More exponent bits means greater range: much larger and much smaller magnitudes can be represented, but each one less precisely.
- A question asking for the effect of moving a bit from one field to the other wants exactly this trade: range against precision.
Échanger des bits de mantisse contre des bits d'exposant
- Le nombre total de bits est fixe, donc les deux champs entrent en concurrence.
- Plus de bits de mantisse signifie une précision accrue : chaque valeur est stockée plus exactement, avec une erreur d'arrondi plus faible.
- Plus de bits d'exposant signifie une plage élargie : des magnitudes beaucoup plus grandes et beaucoup plus petites peuvent être représentées, mais chacune avec moins de précision.
- Une question demandant l'effet du déplacement d'un bit d'un champ à l'autre vise précisément ce compromis : la plage contre la précision.
Normalising a floating-point number · Normalisation d'un nombre en virgule flottante
Step through normalisation. Shifting the mantissa to remove wasted leading zeros — and adjusting the exponent to match — keeps the value the same but spends every bit on precision. · Effectuer la normalisation. Décaler la mantisse pour éliminer les zéros non significatifs initiaux — et ajuster l'exposant en conséquence — conserve la même valeur tout en utilisant chaque bit pour la précision.
Normalising a floating-point number: · Normaliser un nombre en virgule flottante :
Normalisation shifts the mantissa so the first significant bit follows the point — every bit then carries information, and the value is unchanged. · La normalisation décale la mantisse afin que le premier bit significatif suive la virgule — chaque bit porte alors une information, et la valeur reste inchangée.
Which are true of normalising a floating-point number? Select all · tout that apply. · Quelles affirmations sont vraies concernant la normalisation d'un nombre en virgule flottante ? Sélectionnez toutes celles qui s'appliquent.
Normalising changes only the representation. The value is unchanged; that is what adjusting the exponent guarantees. · La normalisation ne change que la représentation. La valeur est inchangée ; c'est ce que garantit l'ajustement de l'exposant.
Approximation and its consequences
- Many denary reals cannot be stored exactly in binary. $0.1$ is the repeating fraction $0.000110011\ldots$, so it must be truncated: the stored value is close to $0.1$ but never equal to it.
- Rounding errors 舍入误差 accumulate over many operations, which is why
0.1 + 0.2is not exactly0.3and why the Patriot's clock drifted. - So never test two reals for equality: write
ABS(x - 0.3) < 1e-9instead ofx = 0.3. And beware subtracting two nearly equal values, which throws away most of the significant digits. - For values that must be exact, currency above all, use fixed-point 定点 or BCD instead.
Approximation et ses conséquences
- De nombreux réels décimaux ne peuvent pas être stockés exactement en binaire. $0.1$ est la fraction répétante $0.000110011\ldots$, elle doit donc être tronquée : la valeur stockée est proche de $0.1$ mais jamais égale à celle-ci.
- Les erreurs d'arrondi 舍入误差 s'accumulent sur de nombreuses opérations, c'est pourquoi
0.1 + 0.2n'est pas exactement0.3et pourquoi l'horloge du Patriot a dérivé. - Ne jamais tester l'égalité de deux réels : écrire
ABS(x - 0.3) < 1e-9au lieu dex = 0.3. Et méfiez-vous de soustraire deux valeurs quasi identiques, cela fait disparaître la plupart des chiffres significatifs. - Pour des valeurs devant être exactes, surtout la monnaie, utilisez la virgule fixe 定点 ou le BCD.
Match each change in the bit allocation to its effect. · Reliez chaque changement dans l'allocation de bits à son effet.
The word size is fixed, so precision and range trade against each other; overflow and underflow are the exponent field running out at each end. · La taille de mot étant fixe, la précision et la plage s'opposent ; les débordements et sous-débordements surviennent lorsque le champ exposant manque à chaque extrémité.
Overflow and underflow
- Overflow 溢出 happens when a result is too large for the exponent's range, so it cannot be represented at all.
- Underflow 下溢 happens when a result is too small, so close to zero that the exponent cannot go low enough, and it rounds to zero.
- Both are properties of the exponent field's size, which is the other half of the trade-off above.
Débordement et sous-débordement
- Le débordement 溢出 survient lorsqu'un résultat est trop grand pour la plage de l'exposant, il ne peut donc pas être représenté du tout.
- Le sous-débordement 下溢 survient lorsqu'un résultat est trop petit, si proche de zéro que l'exposant ne peut descendre assez bas, et il est arrondi à zéro.
- Tous deux sont des propriétés de la taille du champ exposant, qui constitue l'autre moitié du compromis ci-dessus.
0.1 cannot be stored exactly in binary (it is a repeating fraction), so 0.1 + 0.2 does not give exactly 0.3 on a computer. · 0.1 ne peut pas être stocké exactement en binaire (il s'agit d'une fraction périodique), de sorte que 0.1 + 0.2 ne donne pas exactement 0.3 sur un ordinateur.
The tiny approximation errors add up — which is why money is handled with fixed-point or BCD, not floating-point. · Les minimes erreurs d'approximation s'additionnent — c'est pourquoi l'argent est géré avec la virgule fixe ou le BCD, et non en virgule flottante.
For exact money calculations you should use: · Pour des calculs monétaires exacts, vous devriez utiliser :
Floating-point rounding errors are unacceptable for currency; fixed-point or BCD store decimal values exactly. · Les erreurs d'arrondi en virgule flottante sont inacceptables pour la monnaie ; la virgule fixe ou le BCD stockent les valeurs décimales exactement.
Marks that slip away
- The mantissa is a fraction, not an integer: the first bit after the point is a half.
- A mantissa starting with 1 is negative and follows two's complement rules. Check that bit first.
- Normalisation maximises precision; it does not change the value, and it does not make the number bigger.
- More mantissa means precision, more exponent means range. Overflow is too big, underflow is too small.
Pièges qui font perdre des points
- La mantisse est une fraction, pas un entier : le premier bit après la virgule vaut un demi.
- Une mantisse commençant par 1 est négative et suit les règles du complément à deux. Vérifiez ce bit en premier.
- La normalisation maximise la précision ; elle ne change pas la valeur et ne rend pas le nombre plus grand.
- Plus de mantisse signifie précision, plus d'exposant signifie plage. Un débordement est trop grand, un sous-débordement est trop petit.
You've got it
- floating point stores $\text{mantissa} \times 2^{\text{exponent}}$, both in two's complement; the mantissa is a binary fraction
- convert by reading the mantissa as a fraction (two's complement if it starts with 1) and multiplying by two to the exponent
- normalised means the first significant bit is immediately after the point, which maximises precision; shifting left lowers the exponent
- more mantissa bits give precision, more exponent bits give range; binary cannot store many reals exactly, so expect rounding errors, compare with a tolerance, and use fixed-point or BCD for currency
Vous avez compris
- le virgule flottante stocke $\text{mantissa} \times 2^{\text{exponent}}$, tant en complément à deux ; la mantisse est une fraction binaire
- convertir en lisant la mantisse comme une fraction (complément à deux si elle commence par 1) et en multipliant par deux à la puissance de l'exposant
- normalisé signifie que le premier bit significatif est immédiatement après la virgule, ce qui maximise la précision ; un décalage vers la gauche abaisse l'exposant
- plus de bits de mantisse donnent la précision, plus de bits d'exposant donnent la plage ; le binaire ne peut pas stocker exactement de nombreux réels, donc s'attendre à des erreurs d'arrondi, comparer avec une tolérance, et utiliser la virgule fixe ou le BCD pour la monnaie