Вычитание с переносом
Эта статья может быть слишком технической для понимания большинства читателей . ( Июль 2013 г. ) |
Вычитание с переносом — это генератор псевдослучайных чисел : один из многих алгоритмов, предназначенных для создания длинной серии случайных чисел на основе небольшого количества исходных данных. Это тип Фибоначчи с запаздыванием, предложенный Джорджем Марсальей и Арифом Заманом в 1991 году. [1] «Лагированный Фибоначчи» относится к тому факту, что каждое случайное число является функцией двух предыдущих чисел с некоторыми заданными фиксированными смещениями или «лагами».
Алгоритм
[ редактировать ]Последовательность, сгенерированная механизмом вычитания с переносом, может быть описана рекуррентным соотношением :
где .
Константы S и R известны как короткие и длинные задержки соответственно. [2] Следовательно, выражения и соответствуют S -му и R -му предыдущим членам последовательности. S и R удовлетворяют условию . Модуль M имеет значение , где W — размер слова последовательности состояний в битах, а .
Двигатель вычитания с переносом является одним из семейства генераторов, которое включает в себя механизмы сложения с переносом и вычитания с заимствованием . [1]
Это один из трех механизмов генератора случайных чисел, включенных в стандартную библиотеку C++11 . [3]
Ссылки
[ редактировать ]- ^ Jump up to: Перейти обратно: а б Новый класс генераторов случайных чисел , Джордж Марсалья и Ариф Заман, Анналы прикладной вероятности, Vol. 1, № 3, 1991 г.
- ^ Класс subtract_with_carry_engine , Microsoft Visual Studio 2015
- ^ std::subtract_with_carry_engine , cppreference.com