2014-10-19 66 views
4

我有以下幾點:隨機雙打總是無限

std::random_device rd; 
    std::mt19937_64 randEng(rd()); 
    std::uniform_real_distribution<double> rg(std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max()); 

    for(size_t i = 0; i < numToGenerate; i++){ 
     nums[i] = rg(randEng); 
     std::cout << nums[i] << std::endl; 
    } 

哪裏nums是預篩分至numToGenerate

。每一個打印出來,雖然說inf我的理解是,我已經設置此號碼的載體在這種情況下獲得隨機數字-1.79769e+3081.79769e+308,因爲它恰好在我的機器上。我在這裏設置的這個隨機數發生器在做什麼錯誤

+0

什麼是'nums'?你如何初始化它?如果它是一個向量,你可能需要事先調整它的大小,或者使用push_back來避免未定義的行爲。 – 2014-10-19 20:40:35

+0

數字沒有定義。它是如何定義的? – 2014-10-19 20:41:26

+0

'nums'是一個預先設定的大小爲'numToGenerate'的向量 – csteifel 2014-10-19 20:41:34

回答

7

可能是僞隨機數的計算包括差異(max-min)。例如計算AB之間的隨機數一個簡單的方法是:

x = A + rnd*(B - A) 

其中rnd是0和1之間的隨機數,如果你這樣做的最大和最小的雙精度值你得到一個問題,因爲這種差異大於最大值,從而變成「無限」。

之後A + rnd*infinite永遠是無限的,如果rnd不爲零,並且NaN爲零時。