В вашей версии rand() % 10000
даст целое число от 0
до 9999
.Так как RAND_MAX может быть всего 32767, и поскольку это не точно делится на 10000 и не является большим относительно 10000, в «случайности» результата будет существенное смещение, более того, максимальное значение будет 0,9999, а не 1,0и вы излишне ограничили свои значения четырьмя десятичными разрядами.
Это простая арифметика, случайное число, разделенное на максимально возможное случайное число, даст число от 0 до 1 включительно, при этом используется полное разрешение ираспределение ГСЧ
double r2()
{
return (double)rand() / (double)RAND_MAX ;
}
Используйте (double)rand() / (double)((unsigned)RAND_MAX + 1)
, если исключение 1,0 было преднамеренным.