4

そのため、現在行っているいくつかの計算にgmpを使用しようとしています。ある時点で、正規分布から疑似乱数 (prn) を生成する必要があります。

gmp には一様な確率変数があるため、これはすでに非常に役立ちます。ただし、均一な分布から正規分布を生成するために使用する方法を選択するのは難しいと感じています。実際には、私の問題は、gmp には単純な操作しかないことです。たとえば、自分ですべてを実装する必要があるため、cos または erf 評価を使用できません。

私の質問は、gmp の正規分布から prn をどの程度生成できるかということです。また、それが非常に難しい場合は、正規分布が既に実装されている任意精度の lib があるかどうかです。

機能しない方法の2つの例として(この質問から取得):

Ziggurat アルゴリズムは f の評価を使用します。この場合、これは非整数指数であるため、gmp ではサポートされていません。

Box–Muller Transformは、gmp でサポートされていない cos と sin を使用します。

4

3 に答える 3

1

ライブラリに。がある場合、マルサグリア法は機能しますln

于 2012-06-11T15:26:32.037 に答える
1

N(0,1) 分布の乱数を double として生成できるライブラリを GMP の一様生成器と組み合わせます。

たとえば、通常のジェネレーターが0x8.F67E33Ap-1 を生成したとします。

おそらく、これらの数字のほんの一部が実際にランダムであるため、数値を固定数の 2 進数に切り捨て (つまり、16 ビットに切り捨て、 0x8.F67E33Ap-1 => 0x8.F67p-1)、範囲内で一様に数値を生成します。[0x8.F67p-1, 0x8.F68p-1)

より良い近似のために、一様分布を使用する代わりに、間隔の極値で密度関数の値を計算し (ここでは倍精度で十分です)、それらの 2 つによって定義される台形に関連付けられた分布で乱数を生成することができます。値。

この問題を解決する別の方法は、N(x) が 1/n、2/n などになる 1000、10000、または 100000 mpf 値のテーブルを生成することです。次に、一様乱数発生器を使用してこれらの間隔の 1 つを選択し、再び、一様分布または線形分布を使用して、選択した間隔内の乱数を計算します。

于 2012-06-11T16:16:02.120 に答える
1

私はmpfrを使用することになりました。これは本質的に gmp であり、いくつかの機能が追加されています。すでに正規分布が実装されています。

于 2012-07-03T13:18:30.633 に答える