2014-12-15 3 views
7

Я генерирую последовательность случайных чисел с помощью std :: mt19937_64. Я заметил, что, когда вы запускаете GCC и Clang на одной платформе с одним и тем же семенем, я получаю другую последовательность. Я запустил программу через Valgrind и не нашел неинициализированной памяти.Воспроизводимость Mersenne Twister для всех компиляторов

Есть ли какая-либо гарантия на воспроизводимость через компиляторы или на разных платформах с помощью std :: mt19937_64?

Edit: Бег с стандом :: normal_distribution

+3

Если вам нужна совместимость с кросс-компилятором, вы можете использовать [Boost.Random] (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_random.html). –

+0

Возможно, я немного наивна здесь, но, возможно, если они используют один и тот же алгоритм и одни и те же параметры, не должны ли они воспроизводить одну и ту же последовательность? – Rufflewind

+3

Поскольку вы используете обычное распространение, см. Мой [ответ здесь] (http://stackoverflow.com/a/24554535/1708801), в основном ответ - нет, но лежащие в основе двигатели должны быть последовательно похожими на дубликат. –

ответ

10

Номер, двигатели вырабатывают гарантированно воспроизводимые по реализации, но распределения не являются. (источник: rand() considered harmful).

N3337 проект стандарта говорит это о normal_distribution (26.5.8.5.1):

Распределение normal_distribution случайных чисел производит случайные числа х, распределенных в соответствии с функцией плотности вероятности

enter image description here

Параметры распределения μ и σ также известны как среднее и стандартное отклонение этого распределения

И ... все. Он не определяет порядок сгенерированных чисел, ни алгоритм, ни примерные выходы.

Стандарт очень подробно о mersenne_twister_engine (26.5.3.2), он определяет функцию перехода состояния, начальный алгоритм посева и так далее.

+1

Это связано с различием в том, как функции обрабатывают посев? –

+1

Уравнение неверно. Я думаю, вы выбрали неверную ссылку. – rubenvb

+0

@ Mr.Llama Я так сомневаюсь. Стандарт * очень * подробно описывает, как посев должен работать. – milleniumbug

Смежные вопросы