ホームページ >バックエンド開発 >C++ >C で真に一様な乱数を生成するにはどうすればよいですか?

C で真に一様な乱数を生成するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-22 19:42:11687ブラウズ

How Can I Generate Truly Uniform Random Numbers in C  ?

範囲全体にわたって均一に乱数を生成する

指定された間隔 [最小、最大] 内で均一に分布する乱数を生成しようとします。ただし、現在のメソッドは、単一点の周りに集まった数値を生成しています。

rand() の回避

rand() 関数は、一様分布の生成に関しては信頼性が低いことがよくあります。これは、バイアスを導入する可能性のある法演算子に依存しています。

C 11 均一分布

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 はコンテナの要素をランダムに並べ替えることができます。

Boost.Random の代替手段

C 11 が利用できない場合は、同様の機能を提供する Boost.Random の使用を検討してください。

以上がC で真に一様な乱数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。