Eu usei MT19937
em um equipamento de teste para gerar valores [0, - 1] de 32 bits uniformemente (não assinados) , com base na implementação mt19937.c do Authors original , para gerar um suprimento (essencialmente inesgotável) de fluxo estatisticamente aleatório de octetos de bits. Isso substitui um CSPRNG, que não é necessário para esses testes específicos. No entanto, recentemente estive considerando os PRNGs - não por causa das propriedades estatísticas como tais (ambos parecem mais do que adequados para minhas necessidades) - mas eles parecem sugerir uma implementação mais eficiente.WELL
Eu não tenho o conhecimento matemático dos trabalhos acadêmicos, embora eu pudesse pelo menos seguir a matriz de 'torção' e a transformação de têmpera para o primeiro. No entanto, grande parte do código fornecido pelos autores das WELL-n
funções parece se concentrar na geração de ponto flutuante, com algumas constantes mágicas de ponto flutuante (por exemplo, 2.32830643653869628906e-10
). As etapas podem ser omitidas no WELL
código para fornecer uma distribuição uniforme de 32 bits? Ou o algoritmo foi projetado / tendencioso especificamente para distribuições de ponto flutuante?
Ou eu estou errado ao pensar que WELL
trará um ganho de desempenho para a geração vetorial em massa do uint32, satisfazendo meus requisitos?
PCG
RNGs. Eles são muito mais rápidos, podem fornecer períodos muito longos (bem como múltiplos fluxos) com propriedades estatisticamente excelentes e parecem se recuperar muito rapidamente de IVs ruins.