1

C++ で rand() を使用すると、非常に奇妙な動作が見られます。これが私のコードです。

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <limits.h>

#define N 10
int main() {
    srand(time(NULL));

    while(true) {
        int i = N * ((double) rand() / (RAND_MAX));
        //std::cout << i << std::endl;  // If there is any code here, everything goes fine.
        if (i == N) {
            std::cout << "i " << i << " should never happen" << std::endl;
        } else {  
            std::cout << ".";
        }
    }
}

出力は次のとおりです。

i 10 should never happen
i 10 should never happen
i 10 should never happen
...

私は決して10歳になることはないと思うので、それは私には本当に意味がありません.

  • デバッガーを使用してコードをステップ トレースします。i の値はウォッチ内でランダムです。
  • コードのコメントで示したように、sdt:cout のようなコードを追加します。
  • (RAND_MAX) の代わりに (RAND_MAX + 1.0) を使用します。

私のコンパイラは mingw32-g++.exe (TDM-2 mingw32) 4.4.1 です。

これは本当に私を混乱させます。何が起こっているのか誰か教えてもらえますか?

4

1 に答える 1