iOS高斯分布的随机数

时间:2012-10-18 06:21:01

标签: ios random distribution gaussian

  

可能重复:
  Generating a random Gaussian double in Objective-C/C

有没有办法让一个随机数不是来自均匀分布,而是来自iOS中的高斯(正态,贝尔曲线)分布?我发现的所有随机数生成器基本上是统一的,我想让数字簇围绕某一点。谢谢!

2 个答案:

答案 0 :(得分:9)

只需使用统一分布式生成器并应用Box-Muller Transform

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

答案 1 :(得分:1)

一个简单的选择是将统一分布中的多个数字加在一起。许多基于骰子的游戏都使用这种方法来生成大致正常的结果分布。

Distribution of rolling 3 6 sided dice

通过wikipedia

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