Tldr:
Double.MIN_NORMAL
donne le plus petit positive IEEE-754 binary64 "nombre normal" (aussi connu comme les nombres normalisés). Cela correspond à 2-1022, qui est à peu près 2.225 × 10-308.
Double.MIN_VALUE
donne le plus petit positive IEEE-754 binary64 "subnormale nombre" (aussi connu comme anormale ou subnormale numéros). Cela correspond à 2-1074, qui est à peu près à 4,94 × 10-324. (C'est aussi le nombre donné par .NET Double.Epsilon
.)
Tsdr:
Pour comprendre pourquoi ces chiffres sont ce qu'ils sont et quelle est la différence entre eux, nous aurons à examiner plus en profondeur. (Lire également la réponse par Bosonix.)
Considérons la représentation binaire de l'IEEE-754 binary64 format:
s_eee_eeee_eeee_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm
La norme IEEE-754 binary64 les valeurs sont dérivées en tant que tel:
-
Si e
est supérieure à 0 et inférieure à 2047 (2047 est - 111_1111_1111
en binaire),
alors la valeur est égale à (-1)s × 2e-1023 × (1 + m × 2-52). (Ce sont les nombres normaux.)
-
Si e
est égal à 0,
puis la valeur est égale à (-1)s × 2(e+1)-1023 × (0 + m × 2-52). (En plus de zéro, ce sont les nombres dénormalisés.)
-
Si e
est égal à 2047 et m
est égal à 0,
puis la valeur est égale à (-1)s × infini.
-
Si e
est égal à 2047 et m
n'est pas égal à 0,
puis la valeur est égale à NaN. (Sans effet: il y a donc 2 × (252 - 1) bits différents de représentation NaN; cf. doubleToRawLongBits
.)
Par conséquent, la plus petite positif IEEE-754 binary64 nombre normal est égal à:
(-1)0 × 21-1023 × (1 + 0 × 2-52)
= 2-1022
Et la plus petite positif IEEE-754 binary64 subnormale nombre est égal à:
(-1)0 × 2(0+1)-1023 × (0 + 1 × 2-52)
= 2-1022 × 2-52
= 2-1074