我正在尝试在 Objective-C 中生成一个随机高斯双精度(与random.nextGaussian
Java 相同)。然而rand_gauss()
似乎不起作用。有谁知道实现这一目标的方法?
问问题
2138 次
1 回答
10
此链接显示如何使用标准random()
函数计算它。
我应该注意,您可能必须制作将 from 的输出转换为 from 的例程,ranf()
但这应该不会太难。random()
[0,MAX_INT]
[0,1]
从链接的文章:
Box-Muller 变换的极坐标形式在数值上更快更稳健。它的算法描述为: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;
于 2012-01-08T18:04:03.933 回答