c++ - MATLAB 的 rng(seed, 'twister') 函数的等效 C++ 实现
问题描述
我试图想出在 MATLAB 和 C++ 中生成统一随机变量的等效方法。在 MATLAB 中,可以直接使用生成器rng(0, 'twister')
来使用种子 0 和 Marsenne Twister 引擎。然后,例如,可以使用 生成 5 个均匀随机数rand(5,1)
。根据 MATLAB 的rand
文档,它使用mt19937
引擎。
我正在努力在 C++ 中复制它。我使用了以下代码:
#include <iostream>
#include <cmath>
#include <random>
static std::random_device rd;
static std::tr1::mt19937 rand_mt(rd());
int main(void)
{
rand_mt.seed(0);
for (int i = 0;i < 5;i++)
{
std::cout << (double)rand_mt() / ((double)rand_mt.max() -
(double)rand_mt.min()) << std::endl;
}
return 0;
}
这是一个很长的镜头,但我没有从 MATLAB 和 C++ 获得相同的输出。上面的代码有什么我需要解决的问题吗?或者在 C++ 中是否有替代的等效实现?
解决方案
推荐阅读
- c - 有符号字符和无符号字符有什么用
- c# - TruncateTime 实体框架函数不支持异常
- javascript - 无法添加数组元素
- java - 运行线程直到 2 个整数相同
- python - 在 Seaborn 热图中绘制离散 X/Y 值
- html - 我可以使用 100% 高度而不是 100vh 的 flex 在身体中垂直居中吗?
- ios - IOS - ios 中的 googlemaps polyutils 等效类
- dashboard - node-red-dashboard - 从日期选择器链接日期选择
- c# - 用于连接表的 MVC 核心存储库
- android - 将屏幕从一台设备镜像到另一台设备