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

时间:2010-11-30 03:30:38

标签: c++ random range

我正在尝试使用rand()在-50.0和50.0范围内生成一个随机浮点数。我到处寻找答案,但它处理的是int和%运算符。

4 个答案:

答案 0 :(得分:11)

试试这个:

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

答案 1 :(得分:5)

试试这个:

  1. rand()为您提供0到RAND_MAX
  2. 之间的数字
  3. 因此除以RAND_MAX以获得0到1之间的数字
  4. 你希望从-50到50的范围是100,所以乘以100.0
  5. 最后通过减去50.0
  6. 将中心从50(每点3在0到100之间)移动到零

答案 2 :(得分:4)

((float)rand())/RAND_MAX * 100.0 - 50.0

答案 3 :(得分:4)

老实说,所有目前的答案都没有解释他们的解决方案中的分布发生了变化(我假设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);
}

如果你不能,Boost是一个完美的选择。这样,你可以使用my_rand()就像好的'rand():

std::vector<float> random_numbers(1000);
std::generate(random_numbers.begin(), random_numbers.end(), my_rand);