2013-02-15 13 views
7

Ho bisogno di un buon generatore di numeri casuali per un programma che sto scrivendo in C. È un generatore di fiamma frattale, se sei interessato. Le mie immagini stavano uscendo molto sgranate, anche se in passato avevo avuto successo con lo stesso algoritmo. La differenza, finalmente ho capito, era il generatore di numeri casuali che stavo usando. Incredibilmente, fa una differenza ENORME. Spero che un generatore di numeri casuali ancora migliore possa dare risultati migliori. La risposta potrebbe venire sotto forma di un esempio di codice o di un collegamento a una libreria di numeri casuali preesistente. I requisiti più importanti:Un buon generatore di numeri casuali per C

  • dovrebbe produrre flussi relativamente elevati di qualità dei numeri casuali
  • suo periodo devono avere più di dieci miliardi di
  • dovrebbe essere abbastanza veloce e di offrire una performance buon trade-off.
+0

http://en.wikipedia.org/wiki/Comparison_of_hardware_random_number_generators – JosephH

+0

questa domanda è IMHO valido. Un po 'troppo centrato, ma ancora valido nei requisiti. – UmNyobe

+1

@UmNyobe Ho nominato questa domanda per la riapertura. Non riesco a capire perché questo non sia "una vera domanda". Non è una buona domanda? Forse, ma è ancora valido. – Philipp

risposta

9

Questo mi sembra un buon caso d'uso per l'Mersenne Twister

  • E 'più veloce di quanto la maggior parte delle implementazioni standard di rand()
  • Ha un tempo molto lungo (2^19.937-1) periodo
  • ha una qualità piuttosto alta - che passa casualità più standardizzato test
  • E 'di dominio pubblico
+0

no, sta dando un candidato. +1 btw, mai sentito parlare di Mersenne prima di – UmNyobe

+0

Wow, questo sembra un buon generatore di numeri casuali. Grazie mille Philipp, non l'avrei mai trovato da solo. –

+1

Sono sorpreso che MT sia più veloce della maggior parte delle implementazioni di 'rand()'. Non è 'rand()' comunemente un LCG, quindi molto veloce ma di scarsa qualità? –

4

Se stai cercando un algoritmo di qualità molto veloce e decente, dovresti pensare a xorshift128+ o xorshift1024*. Sono quasi veloci come gli LCG (secondo il mio confronto sono solo il 30% più lenti del semplice LCG in linea), con una qualità molto migliore rispetto a LCG nello stesso tempo.

È possibile trovare il proprio codice e di confronto qui: http://xorshift.di.unimi.it/

+1

risposta sottovalutata qui - li ho usati in un paio di progetti fino ad ora e funzionano alla grande, con un'implementazione così semplice! –

Problemi correlati