相关疑难解决方法(0)

为什么GCC和MSVC std :: normal_distribution不同?

我有一个简单的代码示例:

#include <iostream>
#include <random>
using namespace std;
int main() {
    minstd_rand0 gen(1);
    uniform_real_distribution<double> dist(0.0, 1.0);
    for(int i = 0; i < 10; ++i) {
        cout << "1 " << dist(gen) << endl;
    }

    normal_distribution<double> dist2(0.0, 1.0);
    minstd_rand0 gen2(1);
    for(int i = 0; i < 10; ++i) {
        cout << "2 " << dist2(gen2) << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在gccmsvc编译.我在std代码上得到了不同的结果!( 在此输入图像描述

那么为什么GCC和MSVC std::normal_distribution结果对于相同的种子和发生器是不同的,最重要的是,如何强制它们是相同的?

c++ gcc visual-studio visual-c++ c++11

11
推荐指数
2
解决办法
477
查看次数

stl随机分布和可移植性

为什么标准发行版的结果不是强制要求在各实现之间保持一致?伪随机数生成器的结果对经授权的是相同的另一方面.

例如,以下几乎肯定会为每个不同的标准库实现打印不同的东西.

std::mt19937 random {100};
std::normal_distribution<> dist;

std::cout << dist(random);
Run Code Online (Sandbox Code Playgroud)

假设我想进行程序生成,并希望相同的起始种子在平台和编译器之间产生相同的结果.我无法用stl做到这一点.我必须"回归"使用提升.为什么这不是缺陷?

c++ random stl cross-platform c++11

8
推荐指数
1
解决办法
691
查看次数

标签 统计

c++ ×2

c++11 ×2

cross-platform ×1

gcc ×1

random ×1

stl ×1

visual-c++ ×1

visual-studio ×1