Maison > Article > développement back-end > Pourquoi les nombres anormaux sont-ils un compromis entre précision et longueur de représentation ?
Bases de l'IEEE 754
La norme à virgule flottante IEEE 754 organise les nombres dans le format suivant :
Nombres anormaux
Les ingénieurs ont mis en œuvre des nombres subnormaux chiffres pour répondre à une préoccupation. Tous les nombres sauf 0,0 ont un 1 en tête en représentation binaire. Pour éviter de perdre de la précision sur ce bit principal, ils ont créé la « convention des bits principaux ».
Cependant, cela rendrait le plus petit nombre non nul plus grand que la norme précédente. Les ingénieurs ont introduit des nombres anormaux comme exception où :
Cela permet la représentation de nombres plus petits que la plus petite valeur non anormale.
Compromis des nombres subnormaux
Les nombres anormaux représentent un compromis entre précision et longueur de représentation. Les nombres plus petits ont une précision réduite, mais le nombre de valeurs représentées est doublé.
Visualisation
Géométriquement, les valeurs inférieures à la normale étendent la plage de l'exposant 0, doublant ainsi l'espace disponible pour les nombres. et réduire l'espacement dans cette plage.
Implémentation de Subnormals
C float représente les nombres IEEE 754 32 bits sur la plupart des ordinateurs de bureau. Un exemple de programme C démontre les propriétés des nombres subnormaux :
#include <assert.h> #include <inttypes.h> #include <math.h> #include <stdlib.h> #include <stdio.h> typedef struct {...} Float32; // Represents the 32-bit floating point float float_from_bytes(..., uint32_t fraction); // Reconstructs float from individual parts bool float32_equal(float f, uint32_t sign, uint32_t exponent, uint32_t fraction); // Compares float to individual parts int main() { assert(float32_equal(0.5f, 0, 126, 0)); assert(isnormal(0.5f)); ... // More assertions return EXIT_SUCCESS; }
Les subnormaux dans les implémentations
Les subnormaux peuvent être implémentés moins efficacement sur certaines plates-formes. ARMv8 fournit un mode « Flush-to-Zero » dans lequel les valeurs inférieures à la normale sont arrondies à zéro pour optimiser les performances.
Dénormal vs. Subnormal
Subnormal et dénormal sont des synonymes, faisant référence au même type de nombres.
Autres cas particuliers
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!