Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c+的问题+;11 mersenne_捻线机_发动机等级 我一直试图使用C++ 11 MelSeNexToWistByEngEngress类()来在区间[0,1]中生成数字,但是我在每一个数字上都连续地得到0。_C++_C++11_Random_Mersenne Twister - Fatal编程技术网

c+的问题+;11 mersenne_捻线机_发动机等级 我一直试图使用C++ 11 MelSeNexToWistByEngEngress类()来在区间[0,1]中生成数字,但是我在每一个数字上都连续地得到0。

c+的问题+;11 mersenne_捻线机_发动机等级 我一直试图使用C++ 11 MelSeNexToWistByEngEngress类()来在区间[0,1]中生成数字,但是我在每一个数字上都连续地得到0。,c++,c++11,random,mersenne-twister,C++,C++11,Random,Mersenne Twister,这是我的代码片段 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.m

这是我的代码片段

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;


}
unsigned seed1=std::chrono::system_clock::now().time_since_epoch().count();
标准:mt19937发电机(seed1);
for(int i=0;i垂直连接)
垂直于[i]=0;
else vert_con[i]=1;
}
generator()和generator.max()似乎正在工作。。。这只是随机的,给了我0


谢谢

也许你在找什么?这将生成一个均匀分布在区间
[0,1)
中的十进制值,其中
位为随机位(53为双精度的标准最大值)。

也许您正在寻找?这将生成均匀分布在区间
中的十进制值[0,1)
具有
位的随机性(53是双精度的标准最大值)。

mersenne_twister_引擎
返回类型为
UIntType
的结果。如果希望结果为双精度,则需要将其转换为双精度

双随机=(双)生成器()/generator.max()


mersenne\u twister\u引擎
返回类型为
UIntType
的结果。如果希望结果为双精度,则需要将其转换为双精度

双随机=(双)生成器()/generator.max()


在C++中,<代码> /<代码>整数表示一个整数。例如,11/2结果为5,而不是5.5。 你的问题是:

generator()/generator.max()
generator()
generator.max()
都返回整数,当然,
generator.max()>=generator()
,因此结果为零(除非您非常幸运地得到了
max
数字,在这种情况下,结果为一)

要解决此问题,您只需将其强制转换为:

(double)generator()/generator.max()

在C++中,<代码> /<代码>整数表示一个整数。例如,11/2结果为5,而不是5.5。 你的问题是:

generator()/generator.max()
generator()
generator.max()
都返回整数,当然,
generator.max()>=generator()
,因此结果为零(除非您非常幸运地得到了
max
数字,在这种情况下,结果为一)

要解决此问题,您只需将其强制转换为:

(double)generator()/generator.max()
使用中提供的某个分布可能更有意义。正如Cubbi指出的那样,它看起来很适合您的问题。它将根据您传入的分布参数生成
true
false

#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 ;
}
#包括
#包括
#包括
#包括
常数int宽度=5;
const int HEIGHT=5;
常数双垂直连接=0.25;
int main()
{
std::随机_装置rd;
标准:mt19937 gen(rd());
//给出1/4的“真实”时间
//给出3/4的“假”时间
标准:伯努利分布d(垂直连通性);
标准:矢量垂直坐标(宽度*高度);
std::generate(std::begin(vert_-con),std::end(vert_-con),[&](){返回d(gen);});
对于(int i=0;itrue
false

#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 ;
}
#包括
#包括
#包括
#包括
常数int宽度=5;
const int HEIGHT=5;
常数双垂直连接=0.25;
int main()
{
std::随机_装置rd;
标准:mt19937 gen(rd());
//给出1/4的“真实”时间
//给出3/4的“假”时间
标准:伯努利分布d(垂直连通性);
标准:矢量垂直坐标(宽度*高度);
std::generate(std::begin(vert_-con),std::end(vert_-con),[&](){返回d(gen);});
对于(int i=0;istd::cout整数除以整数就是整数。为什么不使用?如果int a0)(a%b=>a)可能是更好的选择,考虑到二进制结果,所以请记住,您可以使用
std::random\u device
而不是时间种子。整数除以整数就是整数。为什么不使用?如果int a0)(a%b=>a)考虑到二进制结果,这可能是更好的选择。因此请记住,您可以使用
std::random_device
而不是时间种子。OP可能正在查找
std::generate(std::begin(vert_con),std::end(vert_con),[&]{return d(gen);};
OP可能正在查找
std::generate(std::begin(std::begin(vert_con),std::end(vert_con),[&]{返回d(gen);});