54 votes

Comment les nombres à virgule flottante sont-ils stockés en mémoire ?

J'ai lu qu'ils sont stockés sous forme de mantisse et d'exposant

J'ai lu ce document mais je n'ai rien compris.

15voto

Wyzard Points 16284

En termes simples, il s'agit essentiellement d' une notation scientifique en binaire. La norme formelle (avec des détails) est IEEE 754 .

9voto

Totonga Points 2162
  typedef struct {
      unsigned int mantissa_low:32;     
      unsigned int mantissa_high:20;
      unsigned int exponent:11;        
      unsigned int sign:1;
    } tDoubleStruct;

double a = 1.2;
tDoubleStruct* b = reinterpret_cast<tDoubleStruct*>(&a);

Est un exemple de configuration de la mémoire si le compilateur utilise la double précision IEEE 754 qui est la valeur par défaut pour un double C sur les systèmes little endian (par exemple Intel x86).

Le voici sous forme binaire basée sur C et mieux lu wikipedia sur la double précision pour le comprendre.

2voto

mouviciel Points 36624

La mantisse représente les bits les plus significatifs du nombre.

L'exposant représente le nombre de décalages à effectuer sur la mantisse afin d'obtenir la valeur réelle du nombre.

L'encodage spécifie comment sont représentés le signe de la mantisse et le signe de l'exposant (essentiellement s'il se déplace vers la gauche ou vers la droite).

Le document auquel vous faites référence spécifie l'encodage IEEE, le plus largement utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X