我发现很多关于如何在C ++中生成1到10之间的随机数的帖子,但是当包含负数时,我很难找到一种方法。我试图得到一个在[-1,1]范围内生成的随机数,但我找不到包含底片的好例子。
答案 0 :(得分:5)
如果您正在谈论实数,请使用std::uniform_real_distribution
:
std::default_random_engine generator(
std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_real_distribution<double> distribution(-1.0, 1.0);
std::cout << distribution(generator) << std::endl;
请务必加入<random>
。这是live example。
如果您仅限于rand()
,这是您可以做的最好的事情:
srand(static_cast<unsigned int>(time(NULL)));
double x = -1. + rand() / (RAND_MAX / 2.);
std::cout << x << std::endl;
请务必加入<cstdlib>
或<stdlib.h>
。这是另一个live example。但请注意,<random>
标题优先于rand()
。有关详细信息,请参阅此演示文稿了解rand() is considered harmful的原因。