I Java doublesono 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 doubles (cioè 4503599627370496 di esse). Ad esempio, questo è il numero di messaggi distinti doublecompreso 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 doublestra 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 doubles come distesa tra potenze di due - non più del 2**62totale 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 / 64la distanza tra le potenze circostanti di due (64 e 128), quindi ti aspetteresti che
(0.1 / 64) * 2**52
distinta doubles - che viene a 7036874417766.4004... dare o prendere uno o due ;-).