2013-09-25 2 views
5

Ho esaminato un problema di sviluppo che richiede l'utilizzo della generazione di numeri pseudocasuali per consentire la generazione dello stesso insieme di numeri casuali per un dato seme. Al momento sto usando long random(void) e void srandom(unsigned seed) per questo (man page), e attualmente questi stanno generando lo stesso insieme di numeri casuali in un'app per Mac, un'app per iOS e un'app per iOS (64-bit) che è quello che ero sperando. I test di iOS erano solo nel simulatore quindi non so se questo influenzerà il risultato.Will random() cambierà mai?

La mia preoccupazione principale è che questo algoritmo potrebbe cambiare a un certo punto, rendendo le applicazioni che stiamo sviluppando efficacemente inutili con i vecchi dati. Quali sono le possibilità che questi algoritmi cambino/siano diversi su un dispositivo futuro?

+0

Chiunque discuta sugli RNG porta sempre alla mente questa classica striscia di Dilbert ... http://dilbert.com/strips/comic/2001-10-25/ // in tema: Penso che @Bathsheba sia perfetto :) – Luke

+0

Probabilmente non cambieranno, poiché ci sono probabilmente molte dipendenze su di loro. Ma non ci sono garanzie. –

risposta

6

Direi che è estremamente probabile che cambieranno poiché la sequenza non è garantita da alcuno standard.

Perché non utilizzare la sequenza di numeri casuali? Anche un semplice generatore lineare congruente soddisfa la maggior parte delle proprietà statistiche della casualità. Ecco la formula per un tale generatore:

next_number = (a * current_number + b) % c 

con

a = 1103515245 
b = 12345 
c = 4294967296 

Questi valori di a, b, c dare buone proprietà statistiche e sono abbastanza ben noto per la costruzione generatori rapido e sporco .

2

Non ho la minima idea della risposta alla domanda che chiedi.

Se una domanda correlata è "Come posso essere assolutamente sicuro di avere le stesse sequenze pseudo-casuali generate in 10 anni?", La risposta a questa domanda è: non fare affidamento su una libreria esterna, scrivere il codice esplicitamente.

Bathsheba ha proposto this generator. Puoi google per "algoritmo generatore pseudo-casuale". Ecco un elenco di algoritmi elencati su wikipedia.

+0

+1 per il collegamento che contiene altri valori per a, be c (mia notazione) – Bathsheba

0

In effetti, srandom è cambiato da Mac OS X 10.7, in base a this blog post. Tuttavia, questo era dovuto a srandom per il modo in cui è stato implementato srandom: ha tentato di accedere a una variabile locale non inizializzata, che è un comportamento non definito in C. Secondo il post, il nuovo compilatore utilizzato dal Mac OS X 10.7 ha ottimizzato la memoria non inizializzata accesso, cambiando il suo comportamento in modi sottili .

+0

Non è la funzione di generatore di numeri casuali 'srandom' che è stata modificata, ma la funzione di seeding' srandomdev'. Dato che l'OP usa un seme fisso 'srandom' potrebbe ancora produrre identici valori pseudo casuali. Questo, ovviamente, non cambia il fatto che 'srandom' * potrebbe * cambiare in qualsiasi momento. –