【发布时间】:2011-05-17 15:40:21
【问题描述】:
我正在尝试使用 rand() 在 -50.0 和 50.0 范围内生成随机浮点数。我到处寻找答案,但它处理整数和 % 运算符。
【问题讨论】:
-
C++ random float的可能重复
我正在尝试使用 rand() 在 -50.0 和 50.0 范围内生成随机浮点数。我到处寻找答案,但它处理整数和 % 运算符。
【问题讨论】:
试试这个:
float RandomNumber(float Min, float Max)
{
return ((float(rand()) / float(RAND_MAX)) * (Max - Min)) + Min;
}
【讨论】:
试试这个:
rand() 给你一个介于 0 和 RAND_MAX 之间的数字
RAND_MAX 得到一个介于 0 和 1 之间的数字【讨论】:
((float)rand())/RAND_MAX * 100.0 - 50.0
【讨论】:
老实说,所有目前的答案都没有解释他们的解决方案的分布发生了变化(我假设 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 是一个完美的选择。这样,您就可以像使用良好的 rand() 一样使用 my_rand():
std::vector<float> random_numbers(1000);
std::generate(random_numbers.begin(), random_numbers.end(), my_rand);
【讨论】:
rand。但是,是的,我同意;如果分发真的很重要,那么 boost 似乎是一个不错的选择。