2012-01-08 23 views
7

Objective-CでランダムなGaussian doubleを生成しようとしています(Javaではrandom.nextGaussianと同じです)。しかしrand_gauss()はうまくいかないようです。誰でもこれを達成する方法を知っていますか?Objective-C/CでランダムなGaussian doubleを生成する

+0

同情あなたは私が仕事であったが、私はそれを見て、1数ヶ月前に書い求めていませんでした。 – Kevin

答えて

9

This linkは、標準random()関数を使用して計算する方法を示しています。

は、私はあなたがおそらく[0,1]からのものであると[0,MAX_INT]からrandom()の出力を変換ranf()ルーチンを作成する必要がありますことに注意しなければならないが、それはあまりにも難しいことではありません。

リンク先の記事から:

ボックス・ミュラー変換の極形式は数値の両方より速く、より堅牢です。アルゴリズムの説明は次のとおりです。 float x1、x2、w、y1、y2;

 do { 
      x1 = 2.0 * ranf() - 1.0; 
      x2 = 2.0 * ranf() - 1.0; 
      w = x1 * x1 + x2 * x2; 
    } while (w >= 1.0); 

    w = sqrt((-2.0 * ln(w))/w); 
    y1 = x1 * w; 
    y2 = x2 * w; 
+1

'randf'には' drand48() '関数を使います。区間[0、1]でdoubleを返します。 https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html – bcattle

+0

また、自然なログを取るために 'log()'関数を使います。http: //en.cppreference.com/w/c/numeric/math/log – bcattle

関連する問題