I Java double
sono in formato IEEE-754 , quindi hanno una frazione di 52 bit; tra due potenze adiacenti di due (inclusa una ed esclusiva della successiva), ci saranno quindi da 2 alla 52a potenza differenti double
s (cioè 4503599627370496 di esse). Ad esempio, questo è il numero di messaggi distinti double
compreso tra 0,5 incluso e 1,0 escluso, ed esattamente che molti si trovano anche tra 1,0 incluso e 2,0 escluso e così via.
Contare doubles
tra 0,0 e 1,0 è più difficile che farlo tra potenze di due, perché ci sono molte potenze di due incluse in quell'intervallo e, inoltre, si entra nelle spinose questioni dei numeri denormalizzati. 10 degli 11 bit degli esponenti coprono l'intervallo in questione, quindi, inclusi i numeri denormalizzati (e penso alcuni tipi di NaN
) avresti 1024 volte la double
s come distesa tra potenze di due - non più del 2**62
totale comunque . Escludendo denormalizzato & c, credo che il conteggio sarebbe 1023 volte 2**52
.
Per un intervallo arbitrario come "da 100 a 100,1" è ancora più difficile perché il limite superiore non può essere rappresentato esattamente come a double
(non essendo un multiplo esatto di qualsiasi potenza di due). Come comoda approssimazione, poiché la progressione tra le potenze di due è lineare, si potrebbe dire che tale intervallo è 0.1 / 64
la distanza tra le potenze circostanti di due (64 e 128), quindi ti aspetteresti che
(0.1 / 64) * 2**52
distinta double
s - che viene a 7036874417766.4004
... dare o prendere uno o due ;-).