我正在尝试使用rand()在-50.0和50.0范围内生成一个随机浮点数。我到处寻找答案,但它处理的是int和%运算符。
答案 0 :(得分:11)
试试这个:
float RandomNumber(float Min, float Max)
{
return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min;
}
答案 1 :(得分:5)
试试这个:
rand()
为您提供0到RAND_MAX
RAND_MAX
以获得0到1之间的数字答案 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);