【问题标题】:iOS Gaussian distribution of random numbers [duplicate]iOS随机数的高斯分布[重复]
【发布时间】:2012-10-08 12:51:42
【问题描述】:

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

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

【问题讨论】:

标签: ios random distribution gaussian


【解决方案1】:

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

通过wikipedia

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

【讨论】:

    【解决方案2】:

    只需使用均匀分布生成器并应用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
    

    【讨论】:

    • 完美,我不知道这个转换。非常感谢!
    • 另请参阅Wikipedia 了解此“极坐标”版本,它避免了三角函数,但可能需要更多调用统一生成器。
    • Objective-C 的极坐标形式也是here
    • @robmayoff 谢谢,但是当arc4random 返回0 时不是log( u1 ) -infinite 吗?
    • 产生±∞的概率约为1/(2^32 - 1) ≈ 2.32831*10^-10。 (我说“大约”是因为当 f1 为 -∞ 时,g2 为 NaN 的概率为 1/UINT32_MAX。)g1g2 的最小/最大有限值为 sqrt(2*log (1/UINT32_MAX)) ≈ ±6.66044。这些有限极值之外的总概率为 erfc(sqrt(log(2^32 - 1))) ≈ 2.73015*10^-11。所以产生±∞的概率大于适当的概率。
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 2012-03-14
    • 2015-04-22
    • 2020-08-24
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多