Frequenza dati e funzione rand e srand

Messaggioda Shadownet614 » 16/05/2018, 09:11

Salve, ho scritto un piccolo programmino che mi calcola la frequenza dell'uscita dei numeri da 1 a 6 di un dado lanciato 6 milioni di volte ..... provandolo su due macchine differenti ( ma entrambe 64 bit ) ottengo dei risultati in frequenza leggermente diversi : esempio su una l'occorrenza dell' 1 è di 1000167 , sull'altra sempre per 1 è 1000107 .... come mai ? Una monta macOs ( macbook pro) , l'altra windows 10 .... compilatori diversi ? grazie
Linux and MacOs user
Shadownet614
Junior Member
Junior Member
 
Messaggio: 135 di 280
Iscritto il: 16/02/2016, 08:48
Località: Napoli

Re: Frequenza dati e funzione rand e srand

Messaggioda Super Squirrel » 16/05/2018, 10:47

Su ogni macchina quante volte lo hai provato il programmino? Una volta presumo, o sbaglio?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 204 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Frequenza dati e funzione rand e srand

Messaggioda apatriarca » 16/05/2018, 23:55

Esistono diverse ragioni per questa discrepanza:
1. Dal punto di vista puramente statistico, assumendo che i due esperimenti siano indipendenti, è improbabile che i risultati siano gli stessi.
1. Siccome il generatore non è davvero casuale, sullo stesso sistema è possibile generare gli stessi valori passando lo stesso valore alla funzione srand. Se non è questo il caso, per esempio se hai inizializzato il valore usando il tempo attuale, allora è decisamente improbabile ottenere gli stessi valori.
2. Lo standard non definisce infine come debba essere implementato il generatore di numeri casuali. L'implementazione potrebbe essere (e molto probabilmente è) molto diversa. I valori generati su due sistemi diversi sono quindi quasi sicuramente diversi.

Se è importante generare gli stessi valori su sistemi diversi è necessario fare uso di una qualche libreria che garantisca che l'implementazione è la stessa nei due sistemi (di solito significa includere una qualche libreria come PCG). Se desideri ottenere esattamente 1000000 per ogni valore allora credo che il modo più semplice sia fare come si fa quando si gioca a carte: mischiare il mazzo ogni volta che finiscono le carte. In altre parole ti crei un array di 6 valori e lo mischi ogni volta che hai estratto 6 valori. Ovviamente questo metodo non corrisponde all'idea di lanciare un dato per un certo numero di volte.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5049 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Frequenza dati e funzione rand e srand

Messaggioda Shadownet614 » 18/05/2018, 08:32

si alla fine mi sono reso conto che dipende dal fatto che ho impostato col valore time della macchina quindi anche pochi secondi fanno variare il tutto ...
Linux and MacOs user
Shadownet614
Junior Member
Junior Member
 
Messaggio: 136 di 280
Iscritto il: 16/02/2016, 08:48
Località: Napoli

Re: Frequenza dati e funzione rand e srand

Messaggioda Shadownet614 » 18/05/2018, 08:33

Super Squirrel ha scritto:Su ogni macchina quante volte lo hai provato il programmino? Una volta presumo, o sbaglio?

no genio, provato 4 volte su ogni macchina quindi 8 volte
Linux and MacOs user
Shadownet614
Junior Member
Junior Member
 
Messaggio: 137 di 280
Iscritto il: 16/02/2016, 08:48
Località: Napoli

Re: Frequenza dati e funzione rand e srand

Messaggioda Super Squirrel » 18/05/2018, 11:36

Grazie del genio, ma continuo a non capire...

Innanzitutto dal tuo primo post, avendo omesso dettagli fondamentali, non si capisce bene quale sia il problema, quindi sia la mia risposta che quella di apatriarca non sono altro che congetture.
Non avendo postato il codice, ho dato per scontato che il programmino fosse scritto in modo corretto (ossia passando alla funzione srand il tempo attuale) e il mio primo post si basa sull'osservazione che risulta praticamente impossibile ottenere gli stessi risultati lanciando più volte il programma anche sulla stessa macchina.

si alla fine mi sono reso conto che dipende dal fatto che ho impostato col valore time della macchina quindi anche pochi secondi fanno variare il tutto ...

Qui la questione diventa ancora meno chiara...
Da questo post mi sembra di capire che hai passato a srand() ogni volta un valore diverso, quindi come hai fatto ad ottenere per ben 4 volte lo stesso risultato? Una coincidenza? :roll:

Per fugare ogni dubbio perchè non posti il codice in questione e ci spieghi bene i dettagli del tuo "esperimento"?!
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 206 di 1486
Iscritto il: 16/05/2013, 22:05


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron