我决定<random>
更好地了解c ++ 11 ,所以我编写了这样的代码:
std::mt19937 gen(10);
std::piecewise_linear_distribution<> d(Range.begin(), Range.end(),
RangeValues.begin());
std::map<int, unsigned int> hist;
for (int n = 0; ++n != iterations;)
++hist[std::round(d(gen))];
for (auto p : hist)
std::cout << std::setw(2) << p.first << ": "
<< std::string(p.second/(iterations/200), '*') << '\n';
Run Code Online (Sandbox Code Playgroud)
由于某些原因std::random_device
似乎不适用于Coliru,所以我输入了一个const样本种子.我认为,它是UB,因此IIRC它主要依赖于硬件,这就是为什么Coliru不支持它(如果我错了,请纠正我).但在Ideone上,它确实有效.
然后我移植它在VS2012上运行,唯一的区别是自己的实现std::round
:
return number < 0.0 ? std::ceil(number - 0.5) : std::floor(number + 0.5);
Run Code Online (Sandbox Code Playgroud)
它在Coliru上完全正确,但是当我在VS2012上编译并运行它时,输出是错误的.
知道如何纠正这个问题,更重要的是,为什么会发生这种情况?我做了一些迟钝的事情,还是VS2012不是聪明人?