- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想知道如何将梅森随机数生成器保留为成员变量并在同一个类中使用它。
我编写了如下类,它运行良好,但我不喜欢 std::mt19937
被初始化。我想知道有没有办法在Test
的构造函数中初始化它?
#include <iostream>
#include <cmath>
#include <random>
#include <chrono>
#include <ctime>
class Test{
public:
Test()
{
}
void foo()
{
auto randomNum = std::uniform_int_distribution<>(0, threads.size())(rnd);
}
private:
std::mt19937 rnd
{
std::chrono::high_resolution_clock::now().time_since_epoch().count()
};
}
最佳答案
我认为您对类内初始化的确切作用感到困惑。当你有
struct foo
{
foo() {}
int bar = 10;
};
类初始化只是语法糖
struct foo
{
foo() : bar(10) {}
int bar;
};
每当编译器将成员添加到成员初始值设定项列表时(这是在您忘记它或编译器提供构造函数时完成的)它会使用您在初始化中使用的内容。所以用你的代码
class Test{
public:
Test()
{
}
void foo()
{
auto randomNum = std::uniform_int_distribution<>(0, threads.size())(rnd);
}
private:
std::mt19937 rnd
{
std::chrono::high_resolution_clock::now().time_since_epoch().count()};
};
};
成为
class Test{
public:
Test() : rnd(std::chrono::high_resolution_clock::now().time_since_epoch().count())
{
}
void foo()
{
auto randomNum = std::uniform_int_distribution<>(0, threads.size())(rnd);
}
private:
std::mt19937 rnd;
};
最好不要真的那样做,而是使用你一开始的做法,这样你就不必重复
rnd(std::chrono::high_resolution_clock::now().time_since_epoch().count())
在您编写的每个构造函数中,但如果您想要特定构造函数的其他内容,您始终可以覆盖它。
关于c++ - Mersenne Twister 种子作为成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855288/
Boost 提供 mt19937 和 mt19937_64 http://www.boost.org/doc/libs/1_55_0/doc/html/boost_random/reference.h
我有一小段代码可以运行 Mersenne Twister PRNG,效果很好: std::random_device randDev; std::mt19937 twister(randDev());
所以我有一个使用 Mersenne Twister 的自定义随机发生器类(我使用的代码改编自 this site)。一切似乎都运行良好,直到我开始测试不同的种子(我通常使用 42 作为种子,以确保每次
我正在将一个大型科学模拟软件迁移到 C++。在 Java 中我使用了 Cern Colt library它包括一个完整的随机分布列表。 当需要不同的发行版(例如提供的链接中列出的发行版)时,通常使用什
我读到“梅森扭曲器的计算复杂度为 O(p2),其中 p 是多项式的次数”。 这是什么意思? 这是指哪个多项式? 此外,计算复杂度是时间复杂度的另一种表述方式,还是与算法运行所需的空间量有关? 最佳答案
我有点不确定这个问题的正确论坛。它介于理论比较之间。科学/数学和编程。 我使用 Mersenne-Twister 生成伪随机数。现在,从给定的种子开始,我想跳到序列中的第 n 个数字。 我看过这个:h
这个问题在这里已经有了答案: stl random distributions and portability (1 个回答) 关闭 8 年前。 我正在使用 std::mt19937_64 生成随机
我的构造函数有什么问题?每次我调用一个应该生成随机数的函数(大约每五秒一次)时,它都会生成相同的数字。每个调用实例化下面这些对象之一。我以为我是用 m_rd 的 operator() 调用的输出随机播
我想知道如何将梅森随机数生成器保留为成员变量并在同一个类中使用它。 我编写了如下类,它运行良好,但我不喜欢 std::mt19937 被初始化。我想知道有没有办法在Test的构造函数中初始化它? #i
我有一个很简单的问题:当我们使用 Mersenne Twister -19937 生成器并修复种子时,每次调用生成器时,它都会生成具有某些特征(独立性、均匀分布)的数字序列。这里重要的是独立性(或 2
众所周知,可以反转 MT 回火功能。可在线获取源代码来执行此操作 here .我试图弄清楚这是如何工作的,以及我将如何以编程方式解决这个问题和类似的问题。 我正在努力解决的是,对有限大小的变量进行移位
我正在尝试运行我的 MapReduce 应用程序。 这是主要类(class): public class GPFunctionFitting { public static void main
我读到 Mersenne Twister 生成器的周期为 2¹⁹⁹³⁷ - 1,但我很困惑为什么会这样。我看到 this implementation Mersenne Twister 算法,在第一条
我尝试使用 32 位种子实现跨平台一致的随机数生成。大多数帖子都指向我Mersenne Twister或者编写我自己的实现。 在 source code有一个名为 void init_by_array
我想生成 1000 个不同的 k 值并计算 k 的均值和方差,但是当我使用 MT 时,它在电子表格中始终是相同的数字。以下是我的代码,希望有人能帮助我。非常感谢! int main(int argc,
我最近在使用 Mersenne-Twister 算法在 C++ 中生成随机数时遇到了一个问题。当遍历for循环并使用cout输出生成的数字时,它会重复输出相同的数字。例如,它输出类似 11 11 11
我想找出我可以用 C++ 为随机数生成器播种的最大值。我的代码如下: mt19937 myRandomGenerator(seed); 变量 seed 可以有多大?我注意到,如果该值变得太大,随机数生
我正在使用 Mersenne Twister 生成具有 1D 柏林噪声的 2D 地形以获取随机数。我的第一个想法是使用 Mersenne Twister 在任何给定的硬件上使用相同的种子总是给我相同的
我编写了一个包含不同算法的 RNG 类,但它没有按预期工作。除了我想使用正常(而不是均匀)分布这一事实之外,我的代码总是返回相同的数字(最大值)或仅返回区间 [min,max] 中的 2 个数字: s
我发现当我用以下方式安排函数时: reactor.callLater(delay, function) 如果在延迟期间系统日期发生更改,则reactor.callLater中设置的延迟将不会被遵守。
我是一名优秀的程序员,十分优秀!