0

我正在尝试为流程的到达和服务时间生成指数分布。在 C++ 中,我的示例工作正常,并在 [0, inf) 范围内生成伪随机数,并且一些比预期的更大。在 Java 中,它不起作用。这些数字比它们的 C++ 等价物小几个数量级,即使我使用相同的公式,我也从来没有得到任何大于 0.99 的值。在 C++ 中,我得到 1.xx 或 2.xx 等,但在 Java 中从来没有。

lambda 是平均到达率,从 1 到 30 不等。我知道 rand.nextDouble() 给出 b/w 0 和 1 的值,从给出的公式和本网站上的答案来看,这似乎是需要的零件。

我应该提到,将我的分布值乘以 10 可以让我更接近它们需要的位置,并且它们的行为符合预期。

在 Java 中:

Random rand = new Random();
// if I multiply x by 10, I get much closer to the distribution I need
// I just don't know why it's off by a factor of 10?!
x =  (Math.log(1-rand.nextDouble())/(-lambda));

我也试过:

x = 0;
while (x == 0)
{
   x = (-1/lambda)*log(rand.nextDouble());
}

我得到的 C++ 代码:

// returns a random number between 0 and 1
float urand()
{
    return( (float) rand()/RAND_MAX );
}

// returns a random number that follows an exp distribution
float genexp(float lambda)
{
    float u,x;
    x = 0;
    while (x == 0)
        {
            u = urand();
            x = (-1/lambda)*log(u);
        }
    return(x);
}
4

0 回答 0