C++ 产生从负到正范围的随机浮动?

C++ 产生从负到正范围的随机浮动?,c++,random,range,C++,Random,Range,我正在尝试使用rand()生成一个介于-50.0和50.0之间的随机浮点值。我到处寻找答案,但它涉及整数和%operator。试试这个: float RandomNumber(float Min, float Max) { return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min; } rand() 因此,除以RAND_MAX得到一个介于0和1之间的数字 你想要一个从-50到50的100的范围,所以乘以100.0 最后

我正在尝试使用rand()生成一个介于-50.0和50.0之间的随机浮点值。我到处寻找答案,但它涉及整数和%operator。

试试这个:

float RandomNumber(float Min, float Max)
{
    return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min;
}
  • rand()
  • 因此,除以
    RAND_MAX
    得到一个介于0和1之间的数字
  • 你想要一个从-50到50的100的范围,所以乘以100.0
  • 最后,通过减去50.0,将中心从50(每点3在0到100之间)移动到零
  • 试试这个:

    float RandomNumber(float Min, float Max)
    {
        return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min;
    }
    

    老实说,现在所有的答案都不能解释它们的解的分布有变化(我假设rand()遵循均匀分布!如果我错了,请纠正我)。请使用库,我的建议是使用C++0x中的新功能:

    #include <random>
    #include <functional>
    
    int main()
    {
        std::mt19937 generator;
        std::uniform_real_distribution<float> uniform_distribution(-50.0, 50.0);
        auto my_rand = std::bind(uniform_distribution, generator);
    }
    
    #包括
    #包括
    int main()
    {
    标准:mt19937发电机;
    标准:均匀实分布均匀分布(-50.0,50.0);
    自动my_rand=std::bind(均匀分布,生成器);
    }
    
    如果不能,Boost是一个完美的选择。这样,您就可以像使用好的ol'rand()一样使用my_rand():

    std::向量随机数(1000);
    std::generate(random_numbers.begin()、random_numbers.end()、my_rand);
    
    问题是他需要特别使用
    rand
    。但是,是的,我同意;如果分布真的很重要,那么boost似乎是一个不错的选择。@Max:更准确地说,问题是“尝试……使用rand()”;“OP从未说过这是一项要求。”杰弗罗米说得很好。我一定比平时更缺乏睡眠了不可复制的
    std::vector<float> random_numbers(1000);
    std::generate(random_numbers.begin(), random_numbers.end(), my_rand);