2014-03-02 34 views
0

我已經在Visual Studio中使用C++創建了一個多維數據集,我試圖給它一個隨機的方向來移動。從我在網上看到的情況來看,我用於隨機數的方程式應該是生成一個-1到1之間的隨機數,或者更正式地(-1,1)生成一個隨機數。但由於某些原因,生成的隨機數字完全相同。如何在由C++中的負值和正值組成的範圍內生成一個隨機數?

我覺得這個部門有什麼問題,但我無法弄清楚。任何幫助,將不勝感激!

// Give the cube a random direction 
float x = 2*((float)rand()/(float)(RAND_MAX + 1.0)) - 1; 
float y = 2*((float)rand()/(float)(RAND_MAX + 1.0)) - 1; 
float z = 2*((float)rand()/(float)(RAND_MAX + 1.0)) - 1; 

m_directionVector = XMFLOAT3(x, y, z); 
+0

所有這些轉換都是不必要的,'rand()/(RAND_MAX + 1.0)'已經執行小數分頻。 – fredoverflow

回答

2

你應該改變種子的新隨機數。 使用:

srand(time(NULL)); 
1
#include <iostream> 
    #include <chrono> 
    #include <random> 

    int main() 
    { 
     // use current time as a seed 
     unsigned nSeed = static_cast<unsigned> 
       (std::chrono::system_clock::now().time_since_epoch().count()); 

     // choose your favourite random engine 
     std::default_random_engine gen(nSeed); 

     // chose a distribution: uniform, normal, etc. 
     double dLo = -10.0; 
     double dHi = 10.0; 
     std::uniform_real_distribution<double> dist(dLo, dHi); 

     for (int i=0; i<10; ++i) 
      std::cout << dist(gen) << std::endl; 

     return 0; 
    } 

9.18209 
-9.9738 
-9.51743 
1.78994 
4.13958 
-2.04672 
-9.38406 
1.04908 
6.23908 
2.55983 

注:以上代碼從http://www.cplusplus.com壓緊(與較小改變)。

相關問題