Robusta geração de números aleatórios

votos
34

Eu estou procurando um RNG performance, razoavelmente robusta usando nenhum hardware especial. Pode usar-se métodos matemáticos (Mersenne tornado, etc), que pode recolher entropia a partir da máquina, seja qual for. No Linux / etc temos um drand48()que gera 48 bits aleatórios. Gostaria uma função semelhante / classe para C ++ ou C # que pode gerar mais do que 32 bits de aleatoriedade e que os bits de baixa ordem são tão aleatório como bits de ordem superior.

Ele não tem que ser criptograficamente segura, mas não deve usar ou se basear na linguagem C rand()ou .NET System.Random.

Qualquer código fonte, links para fontes, etc. seria apreciada! Falhando isso, que tipo de RNG que eu deveria estar procurando?

Publicado 03/08/2008 em 03:05
fonte usuário
Em outras línguas...                            


5 respostas

votos
27

Para C ++, Boost.Random é provavelmente o que você está procurando. Tem suporte para MT (entre muitos outros algoritmos), e pode coletar entropia através da nondet_randomclasse. Confira! :-)

Respondeu 03/08/2008 em 03:18
fonte usuário

votos
8

O GNU Scientific Library (GSL) tem um muito extenso conjunto de geradores RN, equipamento de teste, etc. Se você estiver no Linux, é provavelmente já está disponível em seu sistema.

Respondeu 03/08/2008 em 03:26
fonte usuário

votos
7

Atente para Biblioteca Científica do Gnu. É licenciado sob a GPL em vez de LGPL.

Como outras pessoas mencionados, as classes aleatórias impulso são um bom começo. A 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ê tem uma versão recente do compilador do G ++, você pode encontrar as bibliotecas TR1 já incluídos

Respondeu 13/08/2008 em 19:08
fonte usuário

votos
5

C ++ 11 adotou uma biblioteca de números aleatórios robusto baseado no boost.random. Você pode acessar uma série de motores de números aleatórios utilizando algoritmos diferentes para atender às suas exigências de qualidade, velocidade ou tamanho. Implementações de qualidade vai mesmo fornecer acesso a tudo o RNG não-determinístico sua plataforma oferece via std::random_device.

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

#include <random>

Respondeu 26/06/2012 em 17:05
fonte usuário

votos
2

Boost.Random é a minha primeira escolha para RNG

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

Respondeu 29/03/2012 em 11:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more