Другие ответы уже разъяснили, что 1 не входит в диапазон, но из любопытства я решил посмотреть на источник, чтобы точно узнать, как он рассчитывается.
Источник CPython можно найти здесь
/* random_random is the function named genrand_res53 in the original code;
* generates a random number on [0,1) with 53-bit resolution; note that
* 9007199254740992 == 2**53; I assume they're spelling "/2**53" as
* multiply-by-reciprocal in the (likely vain) hope that the compiler will
* optimize the division away at compile-time. 67108864 is 2**26. In
* effect, a contains 27 random bits shifted left 26, and b fills in the
* lower 26 bits of the 53-bit numerator.
* The orginal code credited Isaku Wada for this algorithm, 2002/01/09.
*/
static PyObject *
random_random(RandomObject *self)
{
unsigned long a=genrand_int32(self)>>5, b=genrand_int32(self)>>6;
return PyFloat_FromDouble((a*67108864.0+b)*(1.0/9007199254740992.0));
}
Таким образом, функция эффективно генерирует m/2^53
, где 0 <= m < 2^53
- целое число. Поскольку числа с плавающей точкой обычно имеют точность 53 бита, это означает, что в диапазоне [1/2, 1) генерируется каждое возможное число с плавающей точкой. Для значений ближе к 0 он пропускает некоторые возможные значения с плавающей запятой для эффективности, но сгенерированные числа равномерно распределены в пределах диапазона. Максимально возможное число, сгенерированное random.random
, равно
0.99999999999999988897769753748434595763683319091796875