Comment un 4 octets peut-il stocker une valeur aussi élevée de 3.4e38

Comme avec 32 bits, nous ne pouvons stocker que 2 ^ 32 bits de données. En langage C, comment pouvons-nous stocker une valeur aussi grande 3.4e38. Je suis incapable de comprendre le mécanisme derrière cela.

Dans le format à virgule flottante binary 32 bits IEEE-754, les 32 bits sont utilisés comme suit:

  • Un champ de signe d’un bit, s .
  • Un champ exposant de huit bits, e .
  • Un champ de significande (fraction) de 23 bits, f .

Ces champs encodent des valeurs:

  • Si tous les bits sont activés dans e et que f est différent de zéro, la valeur est un NaN (pas un nombre).

  • Si tous les bits sont activés dans e et que f est zéro, la valeur est + ∞ (infini) si s est 0 et -∞ si s est 1.

  • Si e est égal à zéro, la valeur est (-1) s (0+ f • 2 -23 ) • 2 -126 .

  • Sinon, la valeur est (-1) s (1+ f • 2 -23 ) • 2 e -127 .

Quelques notes à ce sujet:

  • (-1) s définit le signe. Cette expression est +1 si s est zéro et -1 si s est un.
  • Le troisième cas comprend les zéros et ce que l’on appelle les nombres subnormaux. Dans ce cas, un bit zéro supplémentaire est préfixé du champ de fraction.
  • Le quasortingème cas est le cas normal. Il inclut la plupart des valeurs en virgule flottante. Dans ce cas, un bit supplémentaire est préfixé du champ de fraction.

Le matériel informatique (ou les logiciels) manipule ces bits de manière à rendre l’arithmétique efficace. Par exemple, lorsque vous effectuez une addition, le matériel (en effet) décale les bits des significandes pour ajuster la différence des exposants, puis ajoute les significandes, puis les arrondit pour s’adapter aux bits disponibles. De plus, si l’ajout rend la signification plus grande que les bits disponibles, il est décalé vers la droite (pour l’adapter) et l’exposant est augmenté d’un.