【发布时间】:2012-01-09 03:53:01
【问题描述】:
我正在尝试在 Objective-C 中生成随机高斯双精度(与 Java 中的 random.nextGaussian 相同)。但是rand_gauss() 似乎不起作用。有人知道实现这一目标的方法吗?
【问题讨论】:
-
可惜你没在我上班的时候问,几个月前我查了一下,写了一篇。
标签: objective-c c random gaussian
我正在尝试在 Objective-C 中生成随机高斯双精度(与 Java 中的 random.nextGaussian 相同)。但是rand_gauss() 似乎不起作用。有人知道实现这一目标的方法吗?
【问题讨论】:
标签: objective-c c random gaussian
This link 展示了如何使用标准的random() 函数来计算它。
我应该注意,您可能必须创建 ranf() 例程,将 random() 的输出从 [0,MAX_INT] 转换为来自 [0,1],但这应该不会太难。
来自链接的文章:
Box-Muller 变换的极坐标形式在数值上更快且更稳健。它的算法描述是: 浮点 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;
【讨论】:
randf,使用drand48() 函数。它返回区间 [0, 1) 中的双精度值。见developer.apple.com/library/ios/documentation/System/Conceptual/…
log()函数取自然对数,见en.cppreference.com/w/c/numeric/math/log