Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++库,它允许矩阵和向量的高性能计算。此库具有内置函数,可使用随机数填充其对象。我在一个对象的随机生成过程中使用它。对象创建是随机的,但无论我多久重新创建一次对象,只要种子保持不变,它就保持不变_C++_Random_Armadillo_Prng - Fatal编程技术网

如何使用犰狳在不同的计算机上创建相同的随机数? 我使用的是犰狳C++库,它允许矩阵和向量的高性能计算。此库具有内置函数,可使用随机数填充其对象。我在一个对象的随机生成过程中使用它。对象创建是随机的,但无论我多久重新创建一次对象,只要种子保持不变,它就保持不变

如何使用犰狳在不同的计算机上创建相同的随机数? 我使用的是犰狳C++库,它允许矩阵和向量的高性能计算。此库具有内置函数,可使用随机数填充其对象。我在一个对象的随机生成过程中使用它。对象创建是随机的,但无论我多久重新创建一次对象,只要种子保持不变,它就保持不变,c++,random,armadillo,prng,C++,Random,Armadillo,Prng,问题是,尽管我可以将种子设置为确定的值,从而在我的机器上重新创建相同的运行。。。当我去另一台电脑时,我失去了随机性的连贯性。我来自Matlab的魔法之地,在那里我可以指定用于生成伪随机数的函数。因此,如果选择好功能,这一代人可以跨平台但是如何为犰狳指定RNG功能? 我的研究让我找到了这个源文档,它“详细”描述了随机数生成的过程: 但我不知道该怎么做:这段代码比我能写的要高级得多。我将感谢任何帮助 谢谢你们 备注: -我不在乎使用的随机函数有多好。我只想要一个快速的跨平台跨架构生成器。无论如何

问题是,尽管我可以将种子设置为确定的值,从而在我的机器上重新创建相同的运行。。。当我去另一台电脑时,我失去了随机性的连贯性。我来自Matlab的魔法之地,在那里我可以指定用于生成伪随机数的函数。因此,如果选择好功能,这一代人可以跨平台但是如何为犰狳指定RNG功能?

我的研究让我找到了这个源文档,它“详细”描述了随机数生成的过程:

但我不知道该怎么做:这段代码比我能写的要高级得多。我将感谢任何帮助

谢谢你们

备注: -我不在乎使用的随机函数有多好。我只想要一个快速的跨平台跨架构生成器。无论如何,确定性随机性是我的目标。 -在细节上,考虑到问题,要考虑的机器应该是英特尔处理器、Windows或MAC、32 B或64 B。
-我读过几篇文章提到使用种子进行随机性,但这里的问题似乎是跨平台的上下文,以及随机生成器(至少在我未经训练的眼中)被埋藏在犰狳的代码中的事实。

在C++98/C++03模式下,犰狳将在内部使用std::rand()生成随机数(还有更多,但这是一个很好的近似情况发生了什么)

如果从一个操作系统移动到下一个操作系统(或跨同一操作系统的两个版本),则无法保证系统提供的随机数生成器是相同的

如果在C++11模式下使用犰狳,则可以在函数的帮助下使用任意随机数生成器。示例:

std::mt19937 engine;  // Mersenne twister random number engine with default parameters

std::uniform_real_distribution<double> distr(0.0, 1.0);

mat A(123,456);

A.imbue( [&]() { return distr(engine); } );  // fill with random numbers provided by the engine
std::mt19937引擎;//带有默认参数的Mersenne twister随机数引擎
标准:均匀实分布分布(0.0,1.0);
材料A(123456);
A.imbue([&](){return distr(engine);});//用引擎提供的随机数填充

随机数引擎在C++11中作为标准功能提供。默认参数应在编译器供应商和版本之间保持稳定,并且独立于操作系统。

快速浏览一下API,似乎不清楚为什么在不同的机器上使用相同的种子会产生不同的结果。可能这只是一个错误该库是开源的,您可以尝试调试它。std::rand()的实现在不同的操作系统(和操作系统版本)中会有所不同。感谢您的帮助回答。我不知道或使用imbue函数——我应该承认我不理解最后一行的每个符号的含义(尤其是“[&]”?!)但是我可以使用它!一个附带的问题是:为什么不可能重写std::rand()生成器来创建不同的数字呢?我知道std::rand()可能写得很好,也是一个很好的函数,但正如我所说,我更关注的是可复制性,而不是性能。