我需要在具有均匀分布的循环中生成两个指定数字之间的随机数.我正在使用randomC++ 11库.
我的问题是我在循环中保持相同的数字.要求每次循环传递时生成的数字不同.代码如下:
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
请帮忙.有关通过任何替代方法生成随机数的任何建议都是受欢迎的,但它必须具有统一的分布.
标准库中的随机数引擎是伪随机的,即确定其内部状态如何初始化和变异.这意味着每个函数调用将获得一个新的新生成器,它将继续一遍又一遍地给出相同的数字.
只需创建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;
}
}
Run Code Online (Sandbox Code Playgroud)
实例.
注意,编译程序的每次运行都会得到相同的数字序列.要在程序调用中获得更多随机行为,您可以使用eg std::random_device.
| 归档时间: |
|
| 查看次数: |
2285 次 |
| 最近记录: |