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 …