C++ rand() 模浮点数

c++ rand() modulo floating point numbers

本文关键字:浮点数 rand C++      更新时间:2023-10-16

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

rand() % 100 

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

  1. 我想要的是rand() % PI / 12

解释是 0 和 PI/12 之间的随机角度

提前感谢!

使用 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;
    }
}

你想做的是这样的:

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