在Objective-C/C中生成一个随机的高斯双精度数

8

我正在尝试在Objective-C中生成随机高斯双精度浮点数(与Java中的random.nextGaussian相同)。然而,rand_gauss()似乎不起作用。有人知道实现此目标的方法吗?


真可惜你没在我上班时问,我几个月前查了一下并写了一个。 - Kevin
1个回答

10

这个链接展示了如何使用标准的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;

1
对于 randf 函数,请使用 drand48() 函数。它返回一个在区间 [0, 1) 内的双精度浮点数。请参阅 https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man3/drand48.3.html。 - bcattle
还可以使用log()函数来获取自然对数,参见http://en.cppreference.com/w/c/numeric/math/log - bcattle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接