3

我想要一个指数分布的变量,这样做似乎很有效:

double exp_variate(double lambda){
    return -log(my_random_function())/lambda;
}

其中 my_random_function 给出一个双 x,所以0 < x < 1(严格)意味着我永远不会得到-log(0)or 0。我将如何获得一个排除 0 和 1 值的随机数。我敢肯定以前有人会问过这个问题,但我看不到。此外,我对生成指数分布值的其他方式持开放态度。

编辑:>到<

4

1 回答 1

4

大概你的意思是0 < x < 1,因为一个数字不能同时小于 0 和大于 1。

在那种情况下,我可能会做类似的事情:

double my_random_function() { 
    return (rand() + 1.0) / (RAND_MAX+2.0);
}

C 的随机数生成器通常产生从 0 到 RAND_MAX 的数字。这会将随机数生成器产生的值加一,因此它不能产生 0。除以 RAND_MAX+1 将使我们得到从 1/RAND_MAX 到 (RAND_MAX+1)/(RAND_MAX+1) 的结果,所以后者是 1。因为我们想避免这种情况,所以我们使用 (RAND_MAX+2),所以我们通过 (RAND_MAX+1)/(RAND_MAX+2) 得到 1.0/(RAND_MAX+2),这将是稍微大于 0.0 到稍微低于 1.0 的东西。

于 2012-08-02T01:31:51.477 回答