Domanda

Sto cercando un RNG performante e ragionevolmente robusto che non utilizzi hardware speciale.Può usare metodi matematici (Mersenne Twister, ecc.), può "raccogliere entropia" dalla macchina, qualunque cosa.Su Linux/ecc abbiamo un drand48() che genera 48 bit casuali.Mi piacerebbe una funzione/classe simile per C++ o C# che possa generare più di 32 bit di casualità e quali bit di ordine basso siano altrettanto casuali dei bit di ordine superiore.

Non deve essere crittograficamente sicuro ma non deve utilizzare o essere basato sul linguaggio C rand() o .NET System.Random.

Qualsiasi codice sorgente, collegamenti alla fonte, ecc.sarebbe apprezzato!In caso contrario, quale TIPO di RNG dovrei cercare?

È stato utile?

Soluzione

Per C++, Potenzia. Casuale è probabilmente quello che stai cercando.Supporta MT (tra molti altri algoritmi) e può raccogliere entropia tramite nondet_random classe.Controlla!:-)

Altri suggerimenti

La Biblioteca scientifica Gnu (GSL) ha un set piuttosto ampio di generatori RN, cablaggio di prova, ecc.Se utilizzi Linux, probabilmente è già disponibile sul tuo sistema.

Attenzione alla Biblioteca scientifica Gnu.È concesso in licenza con GPL anziché LGPL.

Come altri hanno già detto, le classi casuali Boost sono un buon inizio.La loro implementazione è conforme al codice PRNG previsto per 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 disponi di una versione recente del compilatore G++, potresti trovare le librerie TR1 già incluse

C++11 ha adottato una solida libreria di numeri casuali basata su boost.random.Puoi accedere a una serie di motori di numeri casuali utilizzando diversi algoritmi per soddisfare i tuoi requisiti di qualità, velocità o dimensione.Le implementazioni di qualità forniranno anche l'accesso a qualsiasi RNG non deterministico tramite la tua piattaforma std::random_device.

In più ci sono molti adattatori per produrre distribuzioni specifiche, eliminando la necessità di fare tale manipolazione a mano (cosa spesso fatta in modo errato).

#include <random>

Boost.Random è la mia prima scelta per RNG

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top