1 c++ random mersenne-twister c++11
我一直在尝试使用c ++ 11 mersenne_twister_engine类(http://www.cplusplus.com/reference/random/mersenne_twister_engine/)在区间[0,1]中生成数字,但是我在每个数字上都不断得0.
这是我的代码片段
unsigned seed1 = std::chrono::system_clock::now().time_since_epoch().count();
std::mt19937 generator(seed1);
for (int i=0; i < WIDTH * HEIGHT; i++) //GENERATES THE MATRIX OF CONNECTIVITY
{
double random = generator()/generator.max();
if ( random > VERT_CONNECTIVITY )
vert_con[i] = 0;
else vert_con[i] = 1;
}
Run Code Online (Sandbox Code Playgroud)
generator()和generator.max()似乎正在工作......它只是随机的,它给了我0!
谢谢!
使用随机头中提供的分布之一可能更有意义.正如Cubbi所指出的那样std :: bernoulli_distribution看起来很适合你的问题.它将生成或根据您传入的分布参数:truefalse
#include <iostream>
#include <random>
#include <vector>
#include <algorithm>
const int WIDTH = 5 ;
const int HEIGHT = 5 ;
const double VERT_CONNECTIVITY = 0.25 ;
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
// give "true" 1/4 of the time
// give "false" 3/4 of the time
std::bernoulli_distribution d(VERT_CONNECTIVITY);
std::vector<int> vert_con( WIDTH * HEIGHT ) ;
std::generate( std::begin(vert_con), std::end( vert_con ), [&] () { return d(gen) ; } ) ;
for (int i=0; i < WIDTH * HEIGHT; i++)
{
std::cout << vert_con[i] << " " ;
}
std::cout << std::endl ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |