2015-02-20 5 views
0

Я получаю случайное NaN между моими выходами.Ошибка NaN для гауссовского случайного распределения

Random Temp:61.816288952756864 'F 
Random Temp:NaN 'F 
Random Temp:NaN 'F 
Random Temp:63.674960517071916 'F 
Random Temp:NaN 'F 
Random Temp:62.581425292320894 'F 
Random Temp:58.21928355494033 'F 
Random Temp:60.00714587886456 'F 
Random Temp:NaN 'F 
Random Temp:60.62983167247955 'F 
Random Temp:62.74961457200155 'F 
Random Temp:58.50731966210792 'F 
Random Temp:NaN 'F 
Random Temp:55.20026299393227 'F 

Вот мой код:

public static double gaussRandom(double dAverage, double dStddev, Random timeRand){ 
    double iRandom1, iRandom2; 
    double dRandom1, dRandom2, result; 

    //iRandom1 = timeRand.nextInt(); 
    //dRandom1 = (double)iRandom1 /2147483647; 
    //iRandom2 = timeRand.nextInt(); 
    //dRandom2 = (double)iRandom2 /2147483647; 

    iRandom1 = timeRand.nextInt(); 
    dRandom1 = (double)iRandom1 /2147483647.0; 
    iRandom2 = timeRand.nextInt(); 
    dRandom2 = (double)iRandom2 /2147483647.0; 

    result = dAverage + dStddev * Math.sqrt(-2.0* Math.log(dRandom1))*Math.cos(6.28318531*dRandom2); 

    return result; 
} 

public static void main(String [] args){ 

    int i, liSampleSize; 
    double dAverage, dStddev, result; 

    System.out.println("==========================\n"); 
    System.out.println("Gaussian numbers generator\n"); 
    System.out.println("==========================\n"); 

    liSampleSize = 24*4; // 24 hours every 15 mins; 
    dAverage = 60; //Average temp; 
    dStddev = 2; //standard deviation of 20; 

    Random myRand = new Random(); 
    myRand.setSeed(System.currentTimeMillis()); 

    for(i = 0; i<liSampleSize;i++) 
    { 
     result = gaussRandom(dAverage,dStddev,myRand); 
     System.out.println("Random Temp:"+ result +" 'F"); 
    } 


} 

Как я могу исправить этот код, чтобы он не генерирует NaN?

ответ

1

В коде dRandom1 может быть отрицательным, в то время как реальные логарифмы только принимать аргументы из (0, +inf)

+0

Потрясающие Спасибо за вашу помощь! – MaRin

+0

Я думаю, что вы имели в виду (0, + inf], где 0 является исключительным. – jaket

+0

@jaket. Моя левая граница верна, так как с правой границей я не согласен с включением + inf, поскольку он не является элементом набора действительных чисел (однако, когда используя IEEE754, это может иметь смысл). – lared

Смежные вопросы