Я хочу генерировать случайные числа в диапазоне от 0 до 1. (Очевидно, это имеет место в другом месте.)
Мой тестовый код:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main() {
double uR;
srand(1);
for(int i=0;i<5;i++){
uR = rand()/(RAND_MAX+1.000);
printf("%d \n", uR);
}
}
А вот вывод после того, как код скомпилирован с GCC:
gcc -ansi -std=c99 -o rand randtest.c
./rand
0
-251658240
910163968
352321536
-528482304
При проверке выясняется, что приведение целого числа RAND_MAX к двойному имеет значение изменения его значения с 2147483647 до -4194304. Это происходит независимо от метода, используемого для изменения RAND_MAX на тип double; до сих пор я пробовал (double)RAND_MAX
и double max = RAND_MAX
.
Почему значение номера меняется? Как я могу остановить это?