2014-12-15 6 views
7

Sto generando una sequenza di numeri casuali con std :: mt19937_64. Ho notato che, quando viene eseguito con GCC e Clang sulla stessa piattaforma con lo stesso seme, ottengo una sequenza diversa. Ho eseguito il programma attraverso Valgrind e non ho trovato memoria non inizializzata.Mersenne Twister Riproducibilità tra i compilatori

Esiste una garanzia di riproducibilità tra compilatori o piattaforme con std :: mt19937_64?

Edit: Correndo con std :: normal_distribution

+3

Se è necessaria la compatibilità garantita del cross-compilatore, è possibile utilizzare [Boost.Random] (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_random.html). –

+0

Forse sono un po 'ingenuo qui, ma probabilmente se usano lo stesso algoritmo e gli stessi parametri, non dovrebbero riprodurre la stessa sequenza? – Rufflewind

+3

Poiché si utilizza la distribuzione normale, consultare la mia [risposta qui] (http://stackoverflow.com/a/24554535/1708801) in pratica la risposta è nient'altro che i motori sottostanti dovrebbero essere coerenti con l'aspetto di un duplicato. –

risposta

10

I numeri che i motori generano sono garantiti per essere riproducibili attraverso implementazioni, ma le distribuzioni non sono. (fonte: rand() considered harmful).

Il progetto di norma N3337 dice questo circa normal_distribution (26.5.8.5.1):

Una distribuzione normal_distribution di numeri casuali produce numeri casuali x distribuiti in base alla funzione di densità di probabilità

enter image description here

I parametri di distribuzione μ e σ sono anche noti come media di distribuzione e deviazione standard

E ... questo è tutto. Non specifica l'ordine dei numeri generati, né l'algoritmo, né gli output di esempio.

Lo standard è molto elaborato su mersenne_twister_engine (26.5.3.2), specifica la funzione di transizione di stato, l'algoritmo di semina iniziale e così via.

+1

Ciò è causato da una differenza nel modo in cui le funzioni gestiscono il seeding? –

+1

L'equazione è errata. Penso che tu abbia scelto il link sbagliato. – rubenvb

+0

@ Mr.Llama ne dubito. Lo standard è * molto * elaborato su come la semina dovrebbe funzionare. – milleniumbug