我正在尝试在Objective-C中生成随机高斯双精度浮点数(与Java中的random.nextGaussian
相同)。然而,rand_gauss()
似乎不起作用。有人知道实现此目标的方法吗?
我正在尝试在Objective-C中生成随机高斯双精度浮点数(与Java中的random.nextGaussian
相同)。然而,rand_gauss()
似乎不起作用。有人知道实现此目标的方法吗?
这个链接展示了如何使用标准的random()
函数计算高斯分布。
值得注意的是,你可能需要编写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;
randf
函数,请使用 drand48()
函数。它返回一个在区间 [0, 1) 内的双精度浮点数。请参阅 https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html。 - bcattlelog()
函数来获取自然对数,参见http://en.cppreference.com/w/c/numeric/math/log - bcattle