C では、rand( )という関数で乱数を作ります。
#include <stdio.h>
#include <stdlib.h> // for rand() RAND_MAX
int main()
{
for ( int i=1; i <= 4; i++) {
printf("%d\n", rand());
}
printf("RAND_MAX is %d\n", RAND_MAX);
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 <stdio.h>
#include <time.h> // for time
#include <stdlib.h> // for rand, srand
int main()
{
srand(time(NULL)); // この行だけが追加されています。
for ( int i=1; i <= 4; i++) {
printf("%d\n", rand());
}
printf("RAND_MAX is %d\n", RAND_MAX);
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 <stdio.h>
#include <time.h> // for time
#include <stdlib.h> // for rand, srand
int main()
{
srand(time(NULL));
for ( int i=1; i <= 4; i++) {
printf("%d\n", rand() % 1000 + 1); // この行が変更されています
}
printf("RAND_MAX is %d\n", RAND_MAX);
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
だいぶ乱数っぽくなりました。