RAND_MAX демонстрирует необычное поведение при перерисовке - PullRequest
1 голос
/ 20 июля 2011

Я хочу генерировать случайные числа в диапазоне от 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.

Почему значение номера меняется? Как я могу остановить это?

Ответы [ 3 ]

3 голосов
/ 20 июля 2011

Вы не можете напечатать double с %d.Если вы используете %f, он работает просто отлично.

1 голос
/ 20 июля 2011

Вы печатаете двойное значение в виде десятичного целого числа, что вызывает путаницу.

Используйте %.6f или что-то подобное.

1 голос
/ 20 июля 2011

Вы передаете двойное значение (uR) на printf, когда оно ожидает signed int. Вы должны разыграть его или напечатать с помощью %f

printf("%d \n", (int)uR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...