rand()
ライブラリ関数がループ内で一度だけ呼び出されると、ほぼ常に正の数値が生成されることに気づきました。
for (i = 0; i < 100; i++) {
printf("%d\n", rand());
}
しかし、2 つの呼び出しを追加するとrand()
、生成される数値に負の数が多くなります。
for (i = 0; i < 100; i++) {
printf("%d = %d\n", rand(), (rand() + rand()));
}
2 番目のケースで負の数値が表示される理由を誰か説明してもらえますか?
PS: ループの前にシードを として初期化しますsrand(time(NULL))
。
ベストアンサー1
rand()
0
は~の間の整数を返すように定義されていますRAND_MAX
。
rand() + rand()
オーバーフローする可能性があります。あなたが観察しているものは、おそらく未定義の動作整数オーバーフローによって発生します。