相关疑难解决方法(0)

C++ 11随机数分布在各个平台上并不一致 - 有哪些替代方案?

我正在为标准的C++ 11引擎寻找一组可移植的发行版,比如`std :: mt19937'(参见http://en.cppreference.com/w/cpp/numeric/random).

引擎实现一致地执行(即在不同平台上生成相同的序列 - 使用Clang和MSVC进行测试),但是分布似乎在不同平台上以不同方式实现.

因此,即使引擎产生相同的序列,似乎分布(例如std::normal_distribution<double>)在不同的平台上不使用相同数量的样本(即产生不同的结果),这在我的情况下是不可接受的.

可能有一个第三方库我可以使用它遵循C++ 11随机模板,但这将在流行的平台上提供一致的值(看看GCC,MSVC和Clang/llvm的支持).

我到目前为止看到的选项是:

  • Boost.random(有点重,但值得,因为它很好地匹配c ++ 11对应物)
  • 从libstd ++克隆(也值得并且可能是可移植的,但是删除特定的函数可能并不简单)
  • 创建我自己的类似C++ 11的随机发行版

我需要制服,正常,毒药和瑞利.

c++ random boost libstdc++ c++11

13
推荐指数
1
解决办法
1196
查看次数

std :: random_device和std :: mt19937是否遵循统一分布?

我试图用C++转换这行matlab: rp = randperm(p);

以下randperm 文件:

randperm使用与rand相同的随机数生成器

并在rand 页面中:

rand返回一个均匀分布的随机数

因此rand遵循统一分布.我的C++代码基于:

std::random_device rd;
std::mt19937 g(rd());
std::shuffle(... , ... ,g);
Run Code Online (Sandbox Code Playgroud)

我的问题是:上面的代码遵循统一分布?如果没有,怎么办?

c++ random matlab uniform-distribution

3
推荐指数
1
解决办法
3376
查看次数

标签 统计

c++ ×2

random ×2

boost ×1

c++11 ×1

libstdc++ ×1

matlab ×1

uniform-distribution ×1