1.0はstd :: generate_canonicalからの有効な出力ですか?
私はいつも、乱数は0と1の間にあり、なし1であると考えていました。つまり、乱数は半開区間[0,1)からの数値です。これはcppreference.comのドキュメントでstd::generate_canonical確認できます。 ただし、次のプログラムを実行すると、 #include <iostream> #include <limits> #include <random> int main() { std::mt19937 rng; std::seed_seq sequence{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; rng.seed(sequence); rng.discard(12 * 629143 + 6); float random = std::generate_canonical<float, std::numeric_limits<float>::digits>(rng); if (random == 1.0f) { std::cout << "Bug!\n"; } return 0; } それは私に次の出力を与えます: Bug! つまり1、MC統合で問題を引き起こす完璧なを生成します。それは有効な動作ですか、それとも私の側にエラーがありますか?これにより、G …