Почему rand () производит целые числа с разницей 3 или 4? - PullRequest
0 голосов
/ 05 октября 2018

Я прочитал, что rand() генерирует то же число, когда не посеян.Итак, я добавил srand() и добавил в него целых чисел с интервалом в 1 .

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;

    for(i = 0 ; i < 10 ; i++)
    {
        srand(i);
        printf("%d ",rand());
    }
    return 0;
}

Но результат был предсказуемым.

38 41 45 48 51 54 58 61 64 68

Результаты имелиразница 3 или 4. Я пробовал то же самое для интервала -9 to 0.Результаты снова были предсказуемы ..!

9 12 15 19 22 25 28 32 35 38

Почему rand() генерирует такие числа ..?

Почему srand(0) всегда приводит к 38 и srand(1) всегда приводит к 41 и т. д.?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

rand печально известен тем, что не очень хорошо реализован в некоторых реализациях на Си.Вполне возможно, что генератор выполняет очень мало работы с начальным числом, чтобы получить следующее значение rand().

. Вы должны взглянуть на второе число каждой последовательности и посмотреть, имеют ли они подобный образец.В этом случае реализация может использовать линейный конгруэнтный генератор .

. Возможно, вы захотите избежать использования встроенных srand и rand и искать альтернативы, такие как Unix 'srandom и random.

0 голосов
/ 05 октября 2018

В компьютерных системах не существует такой вещи, как истинная случайность, функция rand() создаст псевдослучайное число на основе некоторых математических формул, которые используют начальное значение с сеянием, а затем состояние, оставленное после каждого последующего вызова rand().

Вы должны запустить его только один раз (вызовите srand() один раз во всей программе).

При этом rand() сгенерирует ту же последовательность результатов на основеданное семя.Если вы даете ему одно и то же начальное число каждый раз, оно будет каждый раз генерировать одну и ту же последовательность.

Для правильной работы вам нужно использовать другое начальное число каждый раз, когда вы запускаете программу.Использование time() в качестве семени является популярным выбором.

...