gpt4 book ai didi

c++ - 生成具有均匀分布的随机数(在循环中获得相同的数字)

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:49 25 4
gpt4 key购买 nike

我需要在具有均匀分布的循环中生成两个指定数字之间的随机数。我正在使用 C++11 的 random 库。

我的问题是我一直在循环中得到相同的数字。要求每次循环通过时生成的数字都不同。代码如下:

#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <random>
using namespace std;

double randnum (double a, double b)
{
std::default_random_engine generator;
std::uniform_real_distribution<double> distribution (a,b);
double num=distribution(generator);

return num;
}


int main()
{
int np=100;

double umin =0;
double umax=0.5;
double u[np];

for (int i=0;i<np;i++)
{
u[i]=randnum(umin,umax);
cout<<u[i]<<endl;
}
}

请帮忙。欢迎任何关于通过任何替代方法生成随机数的建议,但它必须具有均匀分布。

最佳答案

标准库中的随机数引擎是伪随机,即在其内部状态如何初始化和变异方面具有确定性。这意味着每个函数调用都将获得一个全新的生成器,它将继续一遍又一遍地给出相同的数字。

只需将generator 设为static 函数变量,这样它的状态就可以随着不同的函数调用而变化。

#include <iostream>
#include <random>
using namespace std;

double randnum (double a, double b)
{
static std::default_random_engine generator;
std::uniform_real_distribution<double> distribution (a,b);
return distribution(generator);
}

int main()
{
const int np=100;

double umin =0;
double umax=0.5;
double u[np];

for (int i=0;i<np;i++)
{
u[i]=randnum(umin,umax);
cout<<u[i]<<endl;
}
}

Live Example .

请注意,每次运行已编译程序时,您都会得到相同的数字序列。要在程序调用中获得更多随机行为,您可以使用例如std::random_device

关于c++ - 生成具有均匀分布的随机数(在循环中获得相同的数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com