From e5ccf77f675c2177e1e6bf93859d78a9113fc3a3 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Sun, 17 Oct 2021 23:09:40 +0200 Subject: [PATCH] updated text for FP32 --- slides/cours_5.md | 119 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 2 deletions(-) diff --git a/slides/cours_5.md b/slides/cours_5.md index d71f56e..105fe25 100644 --- a/slides/cours_5.md +++ b/slides/cours_5.md @@ -386,17 +386,132 @@ $$ * Nombres de $0=0000.0000$ à $15.9375=1111.1111$. * Beaucoup de "trous" (au moins $0.0625$) entre deux nombres. -## Solution? +## Solution partielle? . . . * Rajouter des bits. * Bouger la virgule. -# Nombres à virgule flottante (1/N) +# Nombres à virgule flottante (1/2) +## Notation scientifique +* Les nombres sont représentés en terme: + * Une mantisse + * Une base + * Un exposant +$$ +\underbrace{22.1214}_{\mbox{nombre}}=\underbrace{221214}_{\mbox{mantisse}}\cdot +{\underbrace{10}_{\mbox{base}}}{\overbrace{^{-4}}^{\mbox{exp.}}}, +$$ + +. . . + +On peut donc séparer la représentation en 2: + +* La mantisse +* L'exposant + +# Nombres à virgule flottante (2/2) + +## Quel est l'avantage? + +. . . + +On peut représenter des nombres sur énormément d'ordres de grandeur avec un +nombre de bits fixés. + +## Différence fondamentale avec la virgule fixe? + +. . . + +La précision des nombres est **variable**: + +* On a uniquement un nombre de chiffres **significatifs**. +$$ +123456\cdot 10^23+ 123456\cdot 10^{-23}. +$$ + +## Quel inconvénient y a-t-il? + +. . . + +Ce mélange d'échelles entraîne un **perte de précision**. + +# Nombres à virgule flottante simple précision (1/N) + +Aussi appelés *IEEE 754 single-precision binary floating point*. + +](figs/Float_example_bare.svg) + +## Spécification + +* 1 bit de signe, +* 8 bits d'exposant, +* 23 bits de mantisse. + +$$ +(-1)^{b_{31}}\cdot 2^{(b_{30}b_{29}\dots b_{23})_{2}-127}\cdot (1.b_{22}b_{21}\dots b_{0})_{2}, +$$ +## Calculer la valeur décimale du nombre ci-dessus + +# Nombres à virgule flottante simple précision (2/N) + +](figs/Float_example.svg) + +. . . + +\begin{align} +\mbox{exposant}&=\sum_{i=0}^7 b_{23+i}2^i=2^2+2^3+2^4+2^5+2^6=124-127,\\ +\mbox{mantisse}&=1+\sum_{i=1}^{23}b_{23-i}2^{-i}=1+2^{-2}=1.25,\\ +&\Rightarrow (-1)^0\cdot 2^{-3}\cdot 1.25=0.15625 +\end{align} + +# Nombres à virgule flottante simple précision (3/N) + +## Quel nombre ne peux pas être vraiment représenté? + +. . . + +## Zéro: exception pour l'exposant + +* Si l'exposant est `00000000` (zéro) +$$ +(-1)^{\mbox{sign}}\cdot 2^{-126}\cdot 0.\mbox{mantisse}, +$$ +* Sinon si l'exposant est `00000001` à `11111110` +$$ +\mbox{valeur normale}, +$$ +* Sinon `1111111` donne `NaN`. + +# Nombres à virgule flottante simple précision (4/N) + +## Quels sont les plus petits/grands nombres positifs représentables? + +. . . + +\begin{align} +0\ 0\dots0\ 0\dots01&=2^{-126}\cdot 2^{-23}=1.4...\cdot +10^{-45},\\ +0\ 1\dots10\ 1\dots1&=2^{127}\cdot (2-2^{-23})=3.4...\cdot +10^{38}. +\end{align} + +## Combien de chiffres significatifs en décimal? + +. . . + +* 24 bits ($23 + 1$) sont utiles pour la mantisse, soit $2^{24}-1$: + * $\sim2^{24}-1\sim 10^7$, ou encore + * $\sim \log_10(2^{24})\sim 7$, +* Environ **sept** chiffres significatifs. + +# Erreurs d'arrondi <!-- # TODO -- -- GitLab