Forked from
algorithmique / cours
164 commits behind the upstream repository.
-
orestis.malaspin authoredorestis.malaspin authored
cours_6.md 11.95 KiB
title: "Récursivité"
date: "2023-10-31"
Nombres à virgule (1/3)
Comment manipuler des nombres à virgule?
0.1 + 0.2 = 0.3.
Facile non?
. . .
Et ça?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
float a = atof(argv[1]);
float b = atof(argv[2]);
printf("%.10f\n", (double)(a + b));
}
. . .
Que se passe-t-il donc?
Nombres à virgule (2/3)
Nombres à virgule fixe
+-------+-------+-------+-------+-----+----------+----------+----------+----------+
| 2^3 | 2^2 | 2^1 | 2^0 | .
| 2^{-1} | 2^{-2} | 2^{-3} | 2^{-4} |
+-------+-------+-------+-------+-----+----------+----------+----------+----------+
| 1
| 0
| 1
| 0
| .
| 0
| 1
| 0
| 1
|
+-------+-------+-------+-------+-----+----------+----------+----------+----------+
Qu'est-ce ça donne en décimal?
. . .
2^3+2^1+\frac{1}{2^2}+\frac{1}{2^4} = 8+2+0.5+0.0625=10.5625.
Limites de cette représentation?
. . .
- Tous les nombres
> 16
. - Tous les nombres
< 0.0625
. - Tous les nombres dont la décimale est pas un multiple de
0.0625
.
Nombres à virgule (3/3)
Nombres à virgule fixe
- Nombres de 0=0000.0000 à 15.9375=1111.1111.
- Beaucoup de "trous" (au moins 0.0625) entre deux nombres.
Solution partielle?
. . .
- Rajouter des bits.
- Bouger la virgule.
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.}}},
. . .