Я решил лучше узнать С++ 11 <random>
, поэтому я написал такой код:
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';
По какой-то причине std::random_device
, похоже, не работает на Coliru, поэтому вместо этого я ввел пробное семя. Я предполагаю, что это UB, следовательно, IIRC сильно базируется на оборудовании, и почему он не поддерживается на Coliru (исправьте меня, если я ошибаюсь). На Ideone он действительно работает.
Затем я поместил его для запуска на VS2012, единственное отличие которого - это собственная реализация std::round
:
return number < 0.0 ? std::ceil(number - 0.5) : std::floor(number + 0.5);
Он отлично работает на Coliru, но когда я компилирую и запускаю его на VS2012, выход просто неверен.
Любая идея, как исправить это, и что еще более важно, почему это происходит? Я делаю что-то замедленное, или VS2012 не умный здесь?