c ++ rand()modulo浮点数

时间:2013-09-10 00:59:47

标签: c++ random floating-point modulo

在c ++中我希望得到一个随机浮点数。据我所知,典型的随机数生成是通过以下方式完成的:

rand() % 100 

将为您提供0到99之间的值

  1. 我想要的是rand() % PI / 12
  2. 解释是0和PI / 12之间的随机角度

    提前致谢!

2 个答案:

答案 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 ++)中的工具。