新的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;
}
Run Code Online (Sandbox Code Playgroud)
我播种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
Run Code Online (Sandbox Code Playgroud)
从每次./a.out执行时生成的第一个数字可以看出,10循环中的第一个数字在每次执行时都在增加.它似乎总是大约1.02百万.进一步的测试表明这种模式总是存在,并不是巧合.
我只能假设它由于种子time()而增加,种子总是在增加.但这表明该rand()功能并非真正随机且可预测.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |