Мой профессор моделирует приход клиентов в банк. В нем говорится, что клиенты приходят в соответствии с нормальным распределением со средним значением 3,5 и стандартным отклонением 1,3.
Проблема в том, что я с некоторыми трудностями понимаю, почему используется этот код. Я считаю, что предоставленный им код получает поток, среднее и стандартное значение для генерации случайного числа.
Код
public class Random {
private static double second=0;
static double normal(int stream, double mean, double std){
double v1=0, v2=0, y1, y2, x1, x2, w=2;
if (second!=0 ){
return second;
}
while(w>1){
v1=2*RandomGenerator.rand(stream)-1;
v2=2*RandomGenerator.rand(stream)-1;
w=Math.pow(v1,2)+Math.pow(v2,2);
}
y1=v1*Math.pow((-2*Math.log(w))/w, 0.5);
y2=v2*Math.pow((-2*Math.log(w))/w, 0.5);
x1=mean+y1*std;
x2=mean+y2*std;
second=x2;
return x1;
}
}
Мои уроки математики были много лет назад, поэтому немного сложно понять это нормальное распределение, и после поиска в Интернете, как рассчитать нормальное распределение, я не смог найти никакой формулы, похожей на приведенный код.
Итак, это мои вопросы.
- Что делает
second
? Это какая-то защита? - Как этот код использует нормальное распределение? Кажется, не могу понять...