(0,2)之间的随机数均匀分布

时间:2014-09-22 15:03:21

标签: c++ random

我想在(0,2)之间生成随机数。我使用以下代码:

double fRand(double fMin, double fMax)
{
  double f = (double)rand() / RAND_MAX;
  return fMin + f * (fMax - fMin);
}

并设置:

fMin = 0; fMax = 2;

但我没有得到统一分布的数字。我把这个函数称为循环。

它生成随机数,但几乎所有数字都只落在两个区域,而不是均匀分布。

如何确保数字均匀分布?

1 个答案:

答案 0 :(得分:3)

有两种方法可以做到这一点。

你可以使用rand,但你的结果会略有偏差。

rand()做了什么:

Returns a pseudo-random integral number in the range between 0 and RAND_MAX.

示例:

RandomFunction = rand() % 100;      // declares a random number between 0-99

RandomFunction2 = rand() % 100 + 1; // declares a random number between 1-100

This is in the library #include <cstdlib>

您还可以使用

设置种子
srand()

这样做是设置随机数的值,如果用srand()的相同值重复该函数,则该值将相同。这在调试中有时是首选,因为它可以使结果清晰。

参考:www.cplusplus.com

此处还有寻找无偏值的功能,

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 10);


//This function creates a random number between 1-10 and is stored in dis(gen).
// You can change the name of dis if you like. 

示例:

#include <random>
#include <iostream>

int main()
{
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 6);

    for (int n=0; n<10; ++n)
        std::cout << dis(gen) << ' ';
    std::cout << '\n';
}

这会在10之间生成1-6个随机数。示例参考:cppreference