多くのフレームワークとライブラリにはこれが組み込まれています。
また、TokenMacGuyが言ったように、正規分布は、定義された間隔ではなく、平均μと標準偏差σの2つのパラメーターによって特徴付けられます。これらの両方のパラメーターを使用すると、分布の特定の分位数を特定の間隔に制限できるため、すべてのポイントの95%がその間隔に含まれます。ただし、(-∞、∞)以外の間隔に完全に制限することはできません。
均一なランダム値から正規分布値を生成する方法はいくつかあります(これは、ほとんどのランダムまたは疑似乱数ジェネレーターが生成しているものです。
Box-Muller変換は、計算が正確に高速ではありませんが、おそらく最も簡単です。必要な数字の数にもよりますが、それで十分ですが、間違いなく非常に簡単に書くことができます。
もう1つのオプションは、通常はより高速なマルサグリア法です1。
3番目の方法は、ジッグラトアルゴリズムです。これは、計算はかなり高速ですが、プログラミングははるかに複雑です。ただし、実際に多くの乱数を使用するアプリケーションでは、これが最良の選択である可能性があります。
ただし、一般的なアドバイスとして、通常の分散乱数をすでに生成しているライブラリにアクセスできる場合は、自分で記述しないでください。
分布を歪めるには、通常の正規分布を使用し、曲線の片側に適切にμとσを選択してから、必要な平均のどちら側にポイントが落ちたかを判断し、目的の分布に合うように適切にストレッチします。
整数のみを生成する場合は、乱数が目的の間隔内にある場合は最も近い整数に丸め、そうでない場合は拒否することをお勧めします(新しい乱数を描画します)。このようにして、分布を人為的に歪めることはありません(たとえば、値をそれぞれ4または10にクランプする場合など)。
1意図的に悪い乱数ジェネレーター(はい、RANDUよりも悪い)を使用したテストで、極座標法では無限ループが発生し、すべてのサンプルが拒否されることに気付きました。ただし、通常の統計的期待値を満たす乱数では発生しません。