Robust Generering av tilfeldige tall

stemmer
34

Jeg leter etter en performant, rimelig robust RNG bruke ingen spesiell maskinvare. Den kan bruke matematiske metoder (Mersenne Twister, etc), kan det samle entropi fra maskinen, uansett. På Linux / etc har vi en drand48()som genererer 48 tilfeldige biter. Jeg vil ha et tilsvarende funksjon / klasse for C ++ eller C # som kan generere mer enn 32 biter av vilkårlighet og som lav-ordens biter er like så tilfeldig som høy-ordens biter.

Det trenger ikke å være kryptografisk sikker, men det må ikke bruke eller være basert på C-språk rand()eller .NET System.Random.

Noen kildekode, lenker til kilden, etc. ville være verdsatt! Sviktende det, hva slags RNG bør jeg se etter?

Publisert på 03/08/2008 klokken 02:05
kilden bruker
På andre språk...                            


5 svar

stemmer
27

For C ++, Boost.Random er sannsynligvis det du leter etter. Den har støtte for MT (blant mange andre algoritmer), og kan samle entropi via nondet_randomklasse. Sjekk det ut! :-)

Svarte 03/08/2008 kl. 02:18
kilden bruker

stemmer
8

The Gnu Scientific Library (GSL) har et ganske omfattende sett av RN generatorer, test sele, etc. Hvis du er på linux, er det sannsynligvis allerede tilgjengelig på systemet ditt.

Svarte 03/08/2008 kl. 02:26
kilden bruker

stemmer
7

Se opp for Gnu Scientific Library. Det er lisensiert under GPL snarere enn LGPL.

Som andre folk nevnt, Boost tilfeldige klasser er en god start. Gjennomføringen er i samsvar med PRNG kode planlagt for 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

Hvis du har en nyere versjon av G ++ kompilator, kan du finne TR1 bibliotekene som allerede er inkludert

Svarte 13/08/2008 kl. 18:08
kilden bruker

stemmer
5

C ++ 11 har vedtatt en robust tilfeldig tall bibliotek basert på boost.random. Du kan få tilgang til en rekke tilfeldige tall motorer som bruker forskjellige algoritmer for å møte dine kvalitet, hastighet eller størrelse krav. Kvalitet implementeringer vil også gi tilgang til det ikke-determinis RNG plattformen tilbyr via std::random_device.

I tillegg er det mange adaptere for å produsere bestemte fordelinger, og eliminerer behovet for å gjøre slik manipulasjon for hånd (noe som ofte gjøres feil).

#include <random>

Svarte 26/06/2012 kl. 16:05
kilden bruker

stemmer
2

Boost.Random er mitt første valg for RNG

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

Svarte 29/03/2012 kl. 10:32
kilden bruker

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