C++ 产生从负到正范围的随机浮动?
我正在尝试使用rand()生成一个介于-50.0和50.0之间的随机浮点值。我到处寻找答案,但它涉及整数和%operator。试试这个: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 最后
float RandomNumber(float Min, float Max)
{
return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min;
}
rand()
RAND_MAX
得到一个介于0和1之间的数字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);