指定された間隔 [最小、最大] 内で均一に分布する乱数を生成しようとします。ただし、現在のメソッドは、単一点の周りに集まった数値を生成しています。
rand() 関数は、一様分布の生成に関しては信頼性が低いことがよくあります。これは、バイアスを導入する可能性のある法演算子に依存しています。
C 11 では、より信頼性の高い解決策として std::uniform_int_distribution の使用を検討してください。
#include <iostream> #include <random> int main() { const int range_from = min; const int range_to = max; std::random_device rand_dev; std::mt19937 generator(rand_dev()); std::uniform_int_distribution<int> distr(range_from, range_to); std::cout << distr(generator) << '\n'; }
C 11 ライブラリは、その他のさまざまなランダムを提供します異なる分布を持つジェネレーター。たとえば、std::shuffle はコンテナの要素をランダムに並べ替えることができます。
C 11 が利用できない場合は、同様の機能を提供する Boost.Random の使用を検討してください。
以上がC で真に一様な乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。