Subtração com transporte

O algoritmo Subtração com transporte é um gerador de números pseudoaleatórios, fazendo parte de um conjunto de algoritmos projetados para produzir uma longa série de números aparentemente aleatórios com base em uma pequena quantidade de dados iniciais. É do tipo Fibonacci defasado introduzido por George Marsaglia e Arif Zaman em 1991.[1] "Fibonacci defasado" refere-se ao fato de que cada número aleatório é uma função de dois dos números precedentes em alguns deslocamentos fixos especificados, ou "atrasos".

Algoritmo

A sequência gerada pelo mecanismo de subtração com transporte pode ser descrita pela recorrência:

onde .

As constantes S e R são conhecidas como atrasos curtos e longos, respectivamente.[2] Portanto, as expressões e correspondem aos termos anteriores S e R da sequência. S e R satisfazem a condição . O módulo M tem o valor , onde W é o tamanho da palavra, em bits, da sequência de estados e .

O mecanismo de subtração com transporte é um dos geradores da família que inclui também mecanismos de adição com transporte e subtração com empréstimo.[1]

É um dos três mecanismos geradores de números aleatórios incluídos na biblioteca padrão C++11.[3]

Referências

  1. a b Marsaglia, George; Zaman, Arif (1 de agosto de 1991). «A New Class of Random Number Generators». The Annals of Applied Probability (3). ISSN 1050-5164. doi:10.1214/aoap/1177005878. Consultado em 29 de agosto de 2024 
  2. subtract_with_carry_engine Class, Microsoft Visual Studio 2015
  3. std::subtract_with_carry_engine, cppreference.com