1. ホーム
  2. c

[解決済み】rand()+rand()で負の数が出るのはなぜ?

2022-03-28 20:33:24

質問

私は、次のことを観察しました。 rand() ライブラリ関数をループ内で1回だけ呼び出すと、ほとんどの場合、正の数が出力されます。

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番目のケースでマイナスの数字が表示されるのか、どなたか説明してください。

追記:ループの前にseedを初期化しています。 srand(time(NULL)) .

解決方法は?

rand() の間の整数を返すように定義されています。 0RAND_MAX .

rand() + rand()

がオーバーフローする可能性があります。あなたが見ているものは、おそらく 未定義の動作 整数のオーバーフローが原因です。