2012-07-09 51 views
2

我試圖使用boost::random庫來獲得真正的隨機值。這是我的代碼:使用boost :: random庫獲取整型隨機值而不是實數值

#include <iostream> 

#include <boost/random/uniform_real_distribution.hpp> 
#include <boost/random/mersenne_twister.hpp> 

boost::random::mt19937 eng = boost::random::mt19937(); 
boost::random::uniform_real_distribution<double> urd = 
    boost::random::uniform_real_distribution<double>(0,20); 

for (int i = 0; i <= 100; i++) 
    std::cout << urd(eng) << std::endl; 

,但我得到0和20

我該怎麼辦之間的整數?

我也嘗試另一個引擎:

#include <iostream> 

#include <boost/random/uniform_real_distribution.hpp> 
#include <boost/random/lagged_fibonacci.hpp> 

boost::random::lagged_fibonacci607 eng = boost::random::lagged_fibonacci607(); 
boost::random::uniform_real_distribution<double> urd = 
    boost::random::uniform_real_distribution<double>(0,20); 

for (int i = 0; i <= 100; i++) 
    std::cout << urd(eng) << std::endl; 

但沒有......(總是整數值)

+0

什麼你的意思是什麼?你沒有輸出或意外/意外輸出? – 2012-07-09 23:33:44

+0

這意味着我總是得到整數隨機值 – Andry 2012-07-09 23:39:17

+0

您的示例代碼完全適合我。 2.50366 6.34199 15.275 19.0044 9.81178 0.688922 13.2722 8.77489 2.51793 7.63117 4.20418 15.3103 ... – 2012-07-10 00:28:37

回答

3

你怎麼樣輸出之前設置精度? std::cout.precision(15);

或使用:

std::cout.precision(std::numeric_limits<double>::digits10); 

#include <iostream> 
#include <limits> 
#include <boost/random/uniform_real_distribution.hpp> 
#include <boost/random/mersenne_twister.hpp> 

int main() 
{ 
    boost::random::mt19937 eng = boost::random::mt19937(); 
    boost::random::uniform_real_distribution<double> urd = 
    boost::random::uniform_real_distribution<double>(0,20); 

    std::cout.precision(std::numeric_limits<double>::digits10); 
    for (int i = 0; i <= 100; i++) 
    { 
     std::cout << urd(eng) << std::endl; 
    } 
} 

std::cout默認精度爲6,所以應該沒有設置這方面的工作,但是...

+0

對不起,但沒有改變...但是謝謝你,我不知道這件事...... – Andry 2012-07-09 23:38:56

+0

@Andry:請試試我發佈的示例。 – 2012-07-09 23:41:22

+0

不,對不起...總是整數... – Andry 2012-07-09 23:44:09