Les Java double
sont au format IEEE-754 , ils ont donc une fraction de 52 bits; entre deux puissances adjacentes quelconques de deux (dont une incluse et excluant la suivante), il y aura donc 2 à la 52e puissance double
s différentes (c'est-à-dire 4503599627370496 d'entre elles). Par exemple, c'est le nombre de double
s distincts entre 0,5 inclus et 1,0 exclus, et exactement ce nombre se situe également entre 1,0 inclus et 2,0 exclus, et ainsi de suite.
Compter doubles
entre 0,0 et 1,0 est plus difficile que de le faire entre des puissances de deux, car il y a de nombreuses puissances de deux comprises dans cette gamme, et, aussi, on entre dans les questions épineuses des nombres dénormalisés. 10 des 11 bits des exposants couvrent la plage en question, donc, y compris les nombres dénormalisés (et je pense que quelques types de NaN
), vous auriez 1024 fois le double
s entre les puissances de deux - pas plus que le 2**62
total de toute façon . Hors dénormalisé & c, je crois que le décompte serait de 1023 fois 2**52
.
Pour une plage arbitraire comme "100 à 100,1", c'est encore plus difficile car la limite supérieure ne peut pas être représentée exactement comme un double
(n'étant pas un multiple exact d'une puissance de deux). En guise d'approximation pratique, puisque la progression entre les puissances de deux est linéaire, vous pourriez dire que ladite plage est 0.1 / 64
la plage entre les puissances environnantes de deux (64 et 128), donc vous vous attendez à environ
(0.1 / 64) * 2**52
double
s distincts - ce qui revient à 7036874417766.4004
... donner ou prendre un ou deux ;-).