Новичок в C ++ и следующий учебник для начинающих здесь .Обратитесь к разделу под названием Случайные числа в C ++ .Используя именно такой код:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main () {
int i,j;
// set the seed
srand( (unsigned)time( NULL ) );
/* generate 10 random numbers. */
for( i = 0; i < 10; i++ ) {
// generate actual random number
j = rand();
cout <<" Random Number : " << j << endl;
}
return 0;
}
Я сею srand()
с time()
(скомпилировано с g++
), и поэтому сгенерированный результат должен быть полностью случайным.Однако вот результат, который я получаю:
$ ./a.out
Random Number : 1028986599
Random Number : 491960102
Random Number : 561393364
Random Number : 1442607477
Random Number : 813491309
Random Number : 1467533561
Random Number : 986873932
Random Number : 1373969343
Random Number : 411091610
Random Number : 761796871
$ ./a.out
Random Number : 1029003406
Random Number : 774435351
Random Number : 36559790
Random Number : 280067488
Random Number : 1957600239
Random Number : 1937744833
Random Number : 1087901476
Random Number : 684336574
Random Number : 1869869533
Random Number : 621550933
$ ./a.out
Random Number : 1029020213
Random Number : 1056910600
Random Number : 1659209863
Random Number : 1265011146
Random Number : 954225522
Random Number : 260472458
Random Number : 1188929020
Random Number : 2142187452
Random Number : 1181163809
Random Number : 481304995
Как видно из первого числа, сгенерированного при каждом выполнении ./a.out
, первое число в 10-цикле увеличивается при каждом выполнении.И это, кажется, всегда около 1.02
миллионов.Дальнейшее тестирование показывает, что этот паттерн всегда выполняется, и это не совпадение.
Я могу только предположить, что он увеличивается из-за начального числа time()
, которое всегда увеличивается.Но это говорит о том, что функция rand()
не является действительно случайной и предсказуемой.