C++では、rand( )という関数で乱数を取得します。
#include <iostream>
#include <stdlib.h> // for rand() RAND_MAX
int main()
{
for ( int i=1; i <= 4; i++) {
std::cout << rand() << std::endl;
}
std::cout << "RAND_MAX is " << RAND_MAX << std::endl;
return 0;
}
// 1回目
16807
282475249
1622650073
984943658
RAND_MAX is 2147483647
// 2回目
16807
282475249
1622650073
984943658
RAND_MAX is 2147483647
// 3回目
16807
282475249
1622650073
984943658
RAND_MAX is 2147483647
実行結果は毎回同じです。
そこで、毎回初期値を変えてやることで、より乱数っぽくなります。
#include <iostream>
#include <time.h> // for time
#include <stdlib.h> // for rand, srand
int main()
{
srand(time(NULL)); // この行だけが追加されています。
for ( int i=1; i <= 4; i++) {
std::cout << rand() << std::endl;
}
std::cout << "RAND_MAX is " << RAND_MAX << std::endl;
return 0;
}
// 1回目
278588975
730552365
1229588656
461406311
RAND_MAX is 2147483647。
// 2回目
279345290
557036688
1234397943
1834197981
RAND_MAX is 2147483647。
// 3回目
279983956
553677915
618074954
607351339
RAND_MAX is 2147483647
毎回似たような数字が並びますが、微妙に違う値です。
しかし、まだまだ乱数らしくないです。値も大きすぎます。 そこでもう少し工夫します。
#include <iostream>
#include <time.h> // 環境によって必要な場合があります。
#include <stdlib.h> // 環境によって必要な場合があります。
int main()
{
srand(time(NULL));
for ( int i=1; i <= 4; i++) {
std::cout << rand() % 1000 + 1 << std::endl; // この行が変更されています
}
std::cout << "RAND_MAX is " << RAND_MAX << std::endl;
return 0;
}
// 1回目
393
314
678
429
RAND_MAX is 2147483647
// 2回目
919
855
581
97
RAND_MAX is 2147483647
// 3回目
761
349
784
104
RAND_MAX is 2147483647
だいぶ乱数っぽくなりました。