Я ищу набор переносимых дистрибутивов для стандартных движков 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 (немного тяжелый, но стоящий, поскольку он достаточно хорошо соответствует аналогам С ++ 11)
- Клонирование из libstd ++ (также целесообразно и, вероятно, переносимо, но извлечение определенных функций может оказаться непростым делом)
- Создание собственных случайных распределений, подобных C ++ 11
Мне нужна униформа, нормальная, ядовитая и Рэлей.