gpt4 book ai didi

c++ - C++ 11 mersenne_twister_engine 类的问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:26 26 4
gpt4 key购买 nike

我一直在尝试使用 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;


}

generator() 和 generator.max() 似乎在工作......它只是随机的,给我 0!

谢谢!

最佳答案

使用 random header 中提供的发行版之一可能更有意义。正如 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 ;
}

关于c++ - C++ 11 mersenne_twister_engine 类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527043/

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