\( \newcommand{\llbracket}{[\![} \newcommand{\rrbracket}{]\!]} \newcommand{\er}{e_{\operatorname{reel}}} \newcommand{\eb}{e_{\operatorname{biais}}} \)

Cours n°4 :
Nombres à virgule flottante

IEEE 754

R1.03 - Intro. Archi
Victor Poupet

Nombres à virgule

Pour représenter des nombres à virgule, on peut associer des poids fractionnaires à certaines positions


→ virgule fixe


Problème 1 : Perte de précision si l'ordre de grandeur change

Problème 2 : Intervalle réduit

Virgule flottante

Idée : Représenter séparément la valeur et la position de la virgule

→ Virgule flottante


Notation scientifique (base \(b\)): $$ x = ±y \times b^e$$

avec

  • \(1 ≤ y < b\)
  • \(e \in \mathbb{Z}\)

Exemples (base 10) :

\(\begin{align}121 &= 1,21 \times 10^2\\ -5640000 &= -5,64 \times 10^6\\ 45,1 &= 4,51 \times 10^1\\ -0,000000123 &= -1,23 \times 10^{-7}\\ 6,43 &= 6,43 \times 10^0 \end{align}\)


→ Même précision quel que soit l'ordre de grandeur

Schéma

Éléments de la représentation en virgule flottante :


Valeur représentée : $$x = (-1)^s\times m\times 2^e$$

Signe

Le signe d'un nombre à virgule flottante


Le signe est encodé par le premier bit (comme pour les entiers)

Exposant

Solution :

  • Décalage pour éviter les valeurs négatives
  • Sur \(n\) bits, $$\eb = \er + 2^{n-1} - 1$$

$$\begin{align}-2^{n-1} + 1 &\leq \er \leq 2^{n-1} \\ 0 &\leq \eb \leq 2^{n}-1 \end{align}$$

  • Sur \(8\) bits, $$\eb = \er + 127$$

$$\begin{align}-127 &\leq \er \leq 128 \\ 0 &\leq \eb \leq 255 \end{align}$$

Mantisse


Par exemple, pour représenter \(12.75\) :

Norme IEEE 754

IEEE Standard for Floating-Point Arithmetic (1985)

Norme IEEE 754


Norme IEEE 754

IEEE 754 définit deux représentations différentes pour chaque format :

Représentation normalisée


En simple précision

Exemple

Considérons $$x = -73,25_{10}$$


→ Représentation de -73,25 en simple précision :$$1\ 10000101\ 001001010000\ldots 0$$

Représentations non-normalisées

Il existe 3 types de représentations non-normalisées

Représentation dénormalisée


Valeur représentée

Représentation dénormalisée

Importance de la représentation dénormalisée :



(Rappel) plus petit nombre normalisé : \(1,0\times 2^{-126}\) (en SP)

Infini

La représentation correspond à un infini si


$$\begin{align}0\ 11111111\ 00000000000000000000000 &\rightarrow +\infty\\ 1\ 11111111\ 00000000000000000000000 &\rightarrow -\infty\\ \end{align}$$

Not a Number

La représentation correspond à Not a Number (NaN) si


Exemples :$$\begin{align}0\ 11111111\ 00000000110001101000000 &\rightarrow \operatorname{NaN}\\ 1\ 11111111\ 01101100001000010110000 &\rightarrow \operatorname{NaN}\\ \end{align}$$


Bilan

Type Exposant Mantisse
Zéro \(0\) \(0\)
Nombre dénormalisé \(0\) \(\neq 0\)
Nombre normalisé \(1\) à \(2^{|E|}-2\) quelconque
Infinis \(2^{|E|} - 1\) \(0\)
NaN \(2^{|E|} - 1\) \(\neq 0\)

Addition / Soustraction

Pour additionner (ou soustraire) deux nombres en IEEE 754

\(0.5 + (-0.375)\)


\(\begin{eqnarray}0.5 &\rightarrow& 1.0 \times 2^{-1}\\ -0.375 &\rightarrow& -1.1 \times 2^{-2}\\ \end{eqnarray}\)


\(1.0 \times 2^{-1} + (-0.11) \times 2^{-1}\)

\( = 0.01 \times 2^{-1}\)

\( = 1.0 \times 2^{-4}\)

Multiplication

La multiplication est légèrement plus simple

Arrondis

IEEE 754 définit 4 modes d'arrondis :


Les opérations arithmétiques et beaucoup de fonctions élémentaires (log, racines, trigonométrie, etc.) sont calculées avec des arrondis corrects.