如何在C ++中由负值和正值组成的范围内生成随机数?

时间:2014-03-02 07:55:41

标签: c++ random

我使用C ++在Visual Studio中创建了一个多维数据集,我试图给它一个随机的方向来移动。从我在网上看到的,我用于随机数的方程式应该正式生成-1到1或更大的随机数(-1,1)。但由于某种原因,生成的随机数完全相同。

我觉得这个部门有问题,但我无法理解。任何帮助将不胜感激!

// 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);

2 个答案:

答案 0 :(得分:2)

你应该为新的随机数改变种子。 使用方法:

srand(time(NULL));

答案 1 :(得分: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的压缩(略有改动)。