在c ++中我希望得到一个随机浮点数。据我所知,典型的随机数生成是通过以下方式完成的:
rand() % 100
将为您提供0到99之间的值
rand() % PI / 12
解释是0和PI / 12之间的随机角度
提前致谢!
答案 0 :(得分:4)
使用C ++ 11 <random>
解决方案可能如下所示:
#include <random>
#include <iostream>
int main()
{
const int length = 60;
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_real_distribution<double> distribution(0, M_PI/12);
for(int i = 0; i < length; i++)
{
double d = distribution(mt);
std::cout << "d = " << d << std::endl;
}
}
答案 1 :(得分:1)
你想要做的是这样的事情:
double RealRand (double up_to)
{
return double(rand()) / RAND_MAX * up_to;
}
实际上,这样做首先生成0到1之间的随机数(包含左对齐),然后将数字缩放为[0 .. up_to
]。 (注意:如果您不知道,rand()
函数会生成0到RAND_MAX
之间的随机整数。)
但是,有(至少)两个原因你不想这样做。首先,rand()
通常是一个糟糕的随机数生成器。第二,在某些平台上(例如Visual C ++)RAND_MAX
是一个非常小的数字(32767或其他),这导致生成的实际值的分辨率非常低。
强烈建议使用<random>
标题(较新的C ++)中的工具。