Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Generare un numero random

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Generare un numero random

Messaggioda Foto UtenteAjKDAP » 1 feb 2012, 23:44

Non sapevo se scrivere qui o nella sezione informatica,

comunque volevo chiedervi se qualcuno ha qualche esempio, oppure può spiegarmi a grandi linee come viene generato un numero random.

Ad esempio il c++ con qualche libreria mette a disposizione la funzione rand() che genera uno pseudo numero random, partendo da un valore dato in pasto alla funzione.

Io nel mio piccolo lavorando con i microcontrollori andrai a cercare un input esterno, qualche elemento variabile nel tempo, non avendo a disposizione un input "umano", cercherei magari un valore di temperatura, l'inclinazione di un asse dell'accelerometro, sbaglio? :-)

La funzione rand() di prima invece sul sito cplusplus recita:

This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using srand.


Sarei proprio curioso di capire di più sulla generazione del numero pseudo casuale :-)
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

1
voti

[2] Re: Generare un numero random

Messaggioda Foto UtenteDirtyDeeds » 2 feb 2012, 0:13

AjKDAP ha scritto:Io nel mio piccolo lavorando con i microcontrollori andrai a cercare un input esterno, qualche elemento variabile nel tempo, non avendo a disposizione un input "umano", cercherei magari un valore di temperatura, l'inclinazione di un asse dell'accelerometro, sbaglio? :-)


Sbagli ;-)
Cercando degli input esterni, potresti finire per fare dei generatori di numeri casuali con proprietà statistiche non buone.

Meglio generare un numero pseudocasuale con un generatore che abbia passato un certo numero di test statistici. Il generatore più comune è quello a congruenza. Comunque puoi trovare maggiori informazioni nell'Handbook of mathematical functions (vai a p. 949) e nel Numerical recipes (premi Done).
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[3] Re: Generare un numero random

Messaggioda Foto Utentesimo85 » 2 feb 2012, 0:25

Se usi un PIC il TMR0 è sempre in esecuzione.
Avatar utente
Foto Utentesimo85
30,8k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[4] Re: Generare un numero random

Messaggioda Foto UtenteDirtyDeeds » 2 feb 2012, 0:30

Il timer lo puoi utilizzare per generare il seme, tutt'al più, ma non per generare una sequenza di numeri casuali.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[5] Re: Generare un numero random

Messaggioda Foto Utenteadmin » 2 feb 2012, 0:32

Segnalo questo articolo di Foto Utenterusty sull'argomento della generazione casuale
Avatar utente
Foto Utenteadmin
192,1k 9 12 17
Manager
Manager
 
Messaggi: 11810
Iscritto il: 6 ago 2004, 13:14

0
voti

[6] Re: Generare un numero random

Messaggioda Foto UtenteTardoFreak » 2 feb 2012, 0:32

Si, però per ottenere il seme per il generatore di sequenze pseudo random è necessario un intervento di qualche tipo, chessò umano o comunque non prevedibile.
Il micro parte sempre allo stesso modo, il timer conta sempre gli stessi impulsi e quindi darà sempre gli stessi valori.
Se manca un evento esterno non prevedibile l' apparecchiatura produrrà sempre la stessa sequenza e questo non è bene. -:-
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,8k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[7] Re: Generare un numero random

Messaggioda Foto UtenteAjKDAP » 2 feb 2012, 0:38

Grazie Foto UtenteDirtyDeeds per i links, me li leggerò!

Io il timer l'ho utilizzato per scegliere il numero di pedine nel gioco NIM bloccando il timer quando l'utente decide di iniziare il gioco, quindi ogni volta è diverso e sembra casuale.

Ma nel caso che il PIC dovesse decidere da solo il numero random, magari eseguendo l'istruzione sempre allo stesso istante dopo n secondi dall'accensione non funzionerebbe no?

EDIT: esatto, come hai detto tu tardofreak!

Grazie admin per il link, infatti mi sembrava di aver letto da qualche parte su electroyou qualche articolo!


Per ora comunque non devo implementare nulla, ma pensandoci ho iniziato a farmi qualche domanda su come funziona il tutto sui moderni sistemi informatici.
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[8] Re: Generare un numero random

Messaggioda Foto UtenteIsidoroKZ » 2 feb 2012, 0:46

Ho usato qualche volta un generatore congruente che se ben ricordo era fatto cosi`;

X_{n+1}=(2053X_n+13849)\mod 2^{16}

Era comodo da fare su macchine a 8 bit con registri a 16 bit (ad esempio sullo Z80).

Generare il seme e` un vero casino se si vuole che abbia buone probabilita` entropiche. Ad esempio si puo` usare il rumore termico, facendo pero` attenzione ad eliminare interferenze varie, e ripeto e` un vero casino. E quando dico vero casino vuol proprio dire che e`... forse l'ho gia` detto :-)
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
118,8k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 20763
Iscritto il: 17 ott 2009, 0:00

0
voti

[9] Re: Generare un numero random

Messaggioda Foto Utentesimo85 » 2 feb 2012, 1:17

Qui si parla di generare un numero random con un PIC (8 bit).
Spero possa essere utile.

O_/
Avatar utente
Foto Utentesimo85
30,8k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[10] Re: Generare un numero random

Messaggioda Foto UtenteTardoFreak » 2 feb 2012, 8:46

Confermo (qual ora ce non fosse bisogno) quello che dice Foto UtenteIsidoroKZ: generare un vero numero casuale è un gran casino. La generazione dei numeri casuali è sempre stata un problema che mi ha coinvolto direttamente e mi ha dato problemi non tanto per la sequenza (quella del C va benone) ma per ottenere il seme generatore.
L' intervento umano che cattura un contatore che viaggia a velocità folle (ma folle davvero, ordini di grandezza superiore alla velocità di reazione umana) può essere una soluzione per generare UN seme, uno solo.
Due PC o due microcontrollori assolutamente identici che viaggiano alla stessa frequenza fanno esattamente la stessa identica cosa nello stesso istante. Infatti, per avere dei simulatori di volo realistici (usando microsoft flight simulator), alcuni avevano utilizzato due PC identici che partivano insieme generando la stessa simulazione avendo come input gli stessi identici comandi e pilotando 2 o tre monitor ognuno e ... funzionavano!
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,8k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti