c ++ 11 mersenne_twister_engine类的问题

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!

谢谢!

Sha*_*our 5

使用随机头中提供的分布之一可能更有意义.正如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)