Случайное Булево Значение



Я пытаюсь сгенерировать случайный int, который является либо 0, либо 1 в C++. Прямо сейчас, я получаю 0 каждый раз, когда я запускаю этот код, и я не уверен, почему. В чем тут проблема?



#include <ctime>
#include <cstdlib>

srand(time(0));
int randomval = rand() % 2;
cout << randomval << endl;
763   7  

7 ответов:

Это называется невезением. Попробовать еще раз.

Я знаю, что это более старый вопрос, но я считаю, что это правильно отвечает на вопрос.

Не перезапускайте генератор каждый раз, когда вы запускаете этот код.

Каждый раз задавая одно и то же значение, вы просто получите одно и то же "случайное" число. Помните, что это генератор псевдослучайных чисел, поэтому на основе начального значения будет сгенерировано "случайное" число. Так что если вы будете сеять его с одним и тем же номером каждый раз, вы просто получите один и тот же номер каждый раз.

Решение заключается в вызове srand (time (NULL)) только один раз при выполнении программы. Затем каждый вызов rand () будет давать вам другой номер каждый раз.

По теории, есть 50% шанс, что вы получите 0, а 50 - 1. Вы можете попробовать использовать другой модуль-например, 100, чтобы проверить, работает ли это. И я уверен, что это так.

Вы просто выполнили этот код несколько раз, недостаточно.

Другая идея проверить это:

srand(time(0));
for( int i = 0; i < 1000000; ++i )
{
    assert( 0 == ( rand() % 2 ) );
}

Я хотел бы добавить, что при использовании srand(time(0)); "случайное число" всегда будет одинаковым в одну и ту же секунду. Когда я попытался запустить вашу программу 10000 раз и сгруппировать ее по uniq, я увидел, что число не изменится в течение секунды.

for i in `seq 1 10000`; do ./a.out; done | uniq -c
    693 0
   3415 1
    675 0
    673 1
    665 0
    674 1
    668 0
    711 1
    694 0
    673 1
    459 0
bool random() {
    if (rand() % 2 == 0)
        return true;
    else return false;
}

Вы ни с чем не сверяетесь. Использование:

#include <ctime>
#include <cstdlib>

srand(time(0));
int randomval = rand() % 2 == 0;
cout << randomval << endl;

Вызовите srand(time(NULL)); только один раз.

Затем используйте цикл, подобный этому, вы всегда получите 0 или 1 таким образом.

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

srand(time(NULL));

for (i=0;i<10;i++)
{
    printf("%d\n",rand() % 2);
    i++;
}

return 0;

Comments

    Ничего не найдено.