これは、ティアドロップシェイプを定義し、その領域内にあるポイントを(均一なジェネレーターから)受け入れることで実行できることを理解しています。
C ++でこれを行うには、2つの均一な乱数xとyを生成して点(x、y)を特定し、この点が領域内にあるかどうかを確認します。
コード自体に問題はありませんが、ここのロジックに欠陥はありますか?これが真の正規分布であるかどうかを確認するための適切なグラフィカルな方法はまだ見つかりません。
動作するはずのコードは次のとおりです。
typedef unsigned long long int Ullong;
typedef double Doub;
struct Normaldev : Ran {
Doub mu,sig;
Normaldev (Doub mmu, Doub ssig, Ullong i)
: Ran (i), mu(mmu), sig(ssig){}
Doub dev() {
Doub u, v, x, y, q;
do {
u=Doub();
v=1.7156*(Doub()-0.5);
x=u-0.449871;
y=abs(v)+0.386595;
q=x*x+y*(0.19600*y-0.25472*x);
} while(q>0.27597 && (q>0.27846 || v*v>-4*log(u)*u*u));
return mu+sig*v/u;
}
};
Numerical Recipesの本で提案されているコードを、C ++の基本的な知識を使ってできる限り変更しましたが、Ranは正確には何であると考えられていますか?