Я делаю функцию, чтобы сделать другое случайное значение, когда я снова запускаю исполняемый файл. Это моя функция, чтобы сделать бит 0 и 1. В первый раз я запускаю его и получаю вывод 0 1 1 1. И я запускаю.exe, результат аналогичен предыдущему времени. Что происходит? Я хочу другой выход, когда я снова забегаю. Вы можете мне помочь?
int randBit()
{
int bit;
double randval;
randval = (double)rand()/(double)RAND_MAX;
if(randval<0.5) bit=0;
else bit=1;
return bit;
}
Вот решение, использующее заголовок <random>
.
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> dist (0,1);
int random_number = dist(mt);
Вызовите dist(mt)
каждый раз, когда вам нужно новое случайное число.
Вам нужна функция srand
main.
семя это со временем:
#include <time.h> //header for time
int main(){
srand(time(NULL)); // call only once and preferably at the start of main
// your code including the function randBit()
return 0;
}
Вот пример кода:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int randBit()
{
int bit;
double randval;
randval = (double)rand()/(double)RAND_MAX;
if(randval<0.5) bit=0;
else bit=1;
return bit;
}
int main(){
srand(time(NULL));
int i=0,random=0;
for(i=0;i<100;i++){
random = randBit();
printf("%d ",random);
}
printf("\n");
return 0;
}
И это результат:
Notra: Рабочий стол Sukhvir $./test
1 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 0 0 0 0 1 0 1 0 1 1 0 1 1 0 1 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 0 1 1 0 0 0 1 0 1 1 0 0 1 0 1 1 0 1
Функция rand()
в C является псевдослучайной и, следовательно, ей требуется семя. Это семя может быть любым числом, но обычно это текущее время, данные датчика или что-либо еще, что менее предсказуемо.
Семя имеет значение по умолчанию, которое приводит к той же последовательности "случайных" чисел при каждом запуске программы. Чтобы установить семя, вы можете использовать srand()
, например srand(time(NULL))
чтобы использовать текущее время в качестве семени. Случайное значение вычисляется из семени и, следовательно, rand()
калоуцирует новый по каждому вызову на основе предыдущего.
Вы должны вызвать srand()
перед первым вызовом rand()
. Для Windows вы можете использовать:
srand( GetTickCount() );
И платформенно-независимый вариант:
srand( time(NULL) );
С manpage:
Функция rand() возвращает псевдослучайное целое число в диапазоне от 0 до RAND_MAX включительно.
Это означает, что rand
фактически не генерирует случайные значения для каждого вызова, но берет семя в качестве начального значения и генерирует псевдослучайные значения на основе этого семени. При определенном семени каждая последовательность вызовов в rand()
будет обеспечивать такую же последовательность "случайных" чисел.
Семя может быть инициализировано с помощью функции srand()
, и хороший подход к тому, чтобы иметь различную последовательность произведенных чисел в каждом выполнении, - использовать time(NULL)
в качестве семени.
Обратите внимание, что вам нужно инициализировать семя только один раз, поэтому вы можете сделать это в main
функции вашей программы.
Приветствия.
srand(time(NULL))
передrand()