在Objective-C / C中生成随机高斯双精度
我正在尝试在Objective-C中生成随机高斯双random.nextGaussian
(与Java中的random.nextGaussian
相同)。 但是rand_gauss()
似乎不起作用。 有人知道实现这一目标的方法吗?
此链接显示如何使用标准random()
函数计算它。
我应该注意到你可能必须使用ranf()
例程将random()
的输出从[0,MAX_INT]
转换为[0,1]
,但这不应该太难。
来自链接的文章:
Box-Muller变换的极性forms在数值上更快且更稳健。 它的算法描述是: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;