6

可能的重复:
在 Objective-C/C 中生成随机高斯双精度

有没有办法从iOS中的高斯(正态,贝尔曲线)分布中获取随机数?我发现的所有随机数生成器基本上都是统一的,我想让数字聚集在某个点周围。谢谢!

4

2 回答 2

9

只需使用均匀分布生成器并应用Box-Muller 变换

double u1 = (double)arc4random() / UINT32_MAX; // uniform distribution
double u2 = (double)arc4random() / UINT32_MAX; // uniform distribution
double f1 = sqrt(-2 * log(u1));
double f2 = 2 * M_PI * u2;
double g1 = f1 * cos(f2); // gaussian distribution
double g2 = f1 * sin(f2); // gaussian distribution
于 2012-10-18T06:37:10.160 回答
1

一个简单的选择是将来自均匀分布的多个数字相加。许多基于骰子的游戏使用这种方法来生成大致正态分布的结果。

滚动3个6面骰子的分布

通过维基百科

如果您可以更具体地了解您想要的分布,可能会有更精确的解决方案,但组合多个卷是一种简单且相当灵活的解决方案。

于 2012-10-18T06:39:19.013 回答