Skip to content
Snippets Groups Projects
Forked from algorithmique / cours
164 commits behind the upstream repository.
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.}}},

. . .