Экспоненциальное распределение в Java не верно - значения слишком малы?
Я пытаюсь сгенерировать экспоненциальное распределение времени прибытия и обслуживания процессов. В C++ пример, который я имею, работает нормально и генерирует псевдослучайные числа в диапазоне [0, inf), а некоторые больше, чем ожидалось. В Java это не работает. Числа на порядки меньше, чем их эквиваленты в C++, и я НИКОГДА не получаю никаких значений> 0,99, даже если я использую одну и ту же формулу. В C++ я получаю 1.xx или 2.xx и т. Д., Но никогда в Java.
лямбда - это средняя скорость прибытия, которая варьируется от 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);
}