Pergunta

Estou procurando um RNG razoavelmente robusto e com desempenho, sem nenhum hardware especial.Pode usar métodos matemáticos (Mersenne Twister, etc), pode "coletar entropia" da máquina, seja o que for.No Linux/etc temos um drand48() que gera 48 bits aleatórios.Eu gostaria de uma função/classe semelhante para C++ ou C# que possa gerar mais de 32 bits de aleatoriedade e que bits de ordem inferior sejam tão aleatórios quanto bits de ordem superior.

Não precisa ser criptograficamente seguro, mas não deve usar ou ser baseado na linguagem C rand() ou .NET System.Random.

Qualquer código-fonte, links para a fonte, etc.seria apreciado!Caso contrário, que TIPO de RNG devo procurar?

Foi útil?

Solução

Para C++, Impulso.Random é provavelmente o que você está procurando.Possui suporte para MT (entre muitos outros algoritmos) e pode coletar entropia por meio do nondet_random aula.Confira!:-)

Outras dicas

A Biblioteca Científica Gnu (GSL) possui um conjunto bastante extenso de geradores RN, equipamentos de teste, etc.Se você usa Linux, provavelmente ele já está disponível em seu sistema.

Cuidado com a Biblioteca Científica Gnu.É licenciado sob a GPL em vez de LGPL.

Como outras pessoas mencionaram, as classes aleatórias Boost são um bom começo.Sua implementação está em conformidade com o código PRNG previsto para TR1:

http://www.boost.org/doc/libs/1_35_0/libs/random/index.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

Se você tiver uma versão recente do compilador G++, poderá encontrar as bibliotecas TR1 já incluídas

C++ 11 adotou uma biblioteca robusta de números aleatórios baseada em boost.random.Você pode acessar vários mecanismos de números aleatórios usando algoritmos diferentes para atender aos seus requisitos de qualidade, velocidade ou tamanho.Implementações de qualidade fornecerão acesso a qualquer RNG não determinístico que sua plataforma ofereça por meio de std::random_device.

Além disso existem muitos adaptadores para produzir distribuições específicas, eliminando a necessidade de fazer tal manipulação manualmente (algo muitas vezes feito de forma incorreta).

#include <random>

Boost.Random é minha primeira escolha para RNG

http://www.boost.org/doc/libs/random

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top