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 です。
これは本当に私を混乱させます。何が起こっているのか誰か教えてもらえますか?