2014-03-02 2 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에서 (사소한 변경 포함) 끼된다.

관련 문제