如何通过自定义数字创建随机选择器?

时间:2014-05-01 05:24:59

标签: ios objective-c random

传统上如果我想选择25%的案例,我会使用" arc4random()%"函数按整数触发1/4的情况。 现在我有4个浮动率的案例。让我们说吧,

0.3055

B 0.391

C 0.165

D 0.1485

A + B + C + d = 1

如何通过正确选择来开发一个随机选择器来触发4的情况?当然,案例B最有可能被选中。

非常感谢

3 个答案:

答案 0 :(得分:2)

我不认为这是完美的,但它会让你接近

    int probability = arc4random_uniform(10000);
    NSLog(@"Probability: %i", probability);

    if (probability < 3055) {
        // A
    }
    else if (probability <= (3055 + 3910)) {
        // B
    }
    else if (probability <= (3055 + 3910 + 1650)) {
        // C
    }
    else {
        // D
    }

答案 1 :(得分:1)

通过从均匀分布中选择适当的概率。

int myOwnFunkyDistribution(void)
{
    uint32_t A = 0.3055 * UINT32_MAX;
    uint32_t B = A + 0.3910 * UINT32_MAX;
    uint32_t C = B + 0.1650 * UINT32_MAX;

    uint32_t r = arc4random();

    if (r < A)
        return 0;

    if (r < B)
        return 1;

    if (r < C)
        return 2;

    return 3;
}

对于更多情况,使用数组和for循环绝对要重构

答案 2 :(得分:0)

你想做一个多项式的样本。您可以在iOS中使用GSL或其他基于C或C ++的统计库执行此操作。