Каково общее количество уникальных значений для типа double в диапазоне [0.0, 1.0)?

Random.NextDouble () (Double из диапазона [ 0.0,1.0)) иногда умножается на большой Int64 (пусть Int64 big = 9000000000L), и результат сводится к получению случайного значения Int64, большего, чем то, которое может быть получено из Random.Next () (Int32 из диапазона [0 , Int32.MaxValue)).

Random r = new Random();
long big = 9000000000L;
long answer = (long) (r.NextDouble() * big);

Мне кажется, что общее количество уникальных значений для Double в диапазоне [0.0, 1.0) обеспечивает верхнюю границу количества уникальных Int64, которые он может сгенерировать. Фактически, нечеткая верхняя граница столько разных Doubles будет отображаться в один и тот же Int64.

Следовательно, я хотел бы знать: каково общее количество уникальных значений для double в диапазоне [0.0, 1.0)?

Еще лучше, если вы можете скажите мне, какое наибольшее значение может принимать «большой», чтобы «ответ» мог быть значением из диапазона [0, большой), и будет ли распределение значений «ответ» равномерным, предполагая, что Random.NextDouble () равномерно.

Edit: Double (double) здесь относится к IEEE 754 с плавающей запятой double, в то время как Int64 (long) и Int32 (int) относятся к 64-битному и 32-битному дополнению со знаком 2 соответственно.


На основе этого вопроса : Генерация 10-значного уникального случайного числа в java

Хотя я использовал C #, этот вопрос не зависит от языка и больше касается дискретной математики, чем программирования, но меня это беспокоит в основном не из-за математического любопытства, а из-за того, что программист хочет использовать формулу только в том случае, если она делает то, что она должна делать, и с точки зрения безопасности.

8
задан Community 23 May 2017 в 12:14
поделиться