Os Java doubles estão no formato IEEE-754 , portanto, eles têm uma fração de 52 bits; entre quaisquer duas potências adjacentes de dois (incluindo uma e exclusiva da próxima), haverá, portanto, 2 elevado à 52ª potência doubles diferentes (ou seja, 4503599627370496 deles). Por exemplo, esse é o número de doubles distintos entre 0,5 incluídos e 1,0 excluídos, e exatamente esse número também está entre 1,0 incluído e 2,0 excluídos e assim por diante.
Contar doublesentre 0,0 e 1,0 é mais difícil do que entre potências de dois, porque há muitas potências de dois incluídas nessa faixa e, também, entra-se nas questões espinhosas dos números desnormalizados. 10 dos 11 bits dos expoentes cobrem o intervalo em questão, então, incluindo números desnormalizados (e eu acho que alguns tipos NaN), você teria 1024 vezes o doubles entre potências de dois - não mais do que 2**62no total de qualquer maneira . Excluindo o desnormalizado etc., acredito que a contagem seria de 1.023 vezes 2**52.
Para um intervalo arbitrário como "100 a 100,1" é ainda mais difícil porque o limite superior não pode ser representado exatamente como a double(não sendo um múltiplo exato de qualquer potência de dois). Como uma aproximação útil, uma vez que a progressão entre as potências de dois é linear, você poderia dizer que o referido intervalo é o 0.1 / 64décimo do intervalo entre as potências circundantes de dois (64 e 128), então você esperaria cerca de
(0.1 / 64) * 2**52
distinto doubles - que vem para 7036874417766.4004... dar ou tirar um ou dois ;-).