R1C (Member)
Newbie
Messaggi: 17
Iscritto: 19/03/2011
|
Salve ragazzi,
questa domanda è rivolta a chi si intende di linguaggi di programmazione in generale, poiche la generazione di numeri pseudocasuali e conforme con tutti i linguaggi esistenti.
La domanda è perche bisogna impostare per forza il seme e poi succesivamente richiamara la rand() ?
Ad esempio se faccio srand(4); e poi rand() % 10; il calcolatore puoì eseguire 4 tipi di sequenze di valori random, e dopo scegliere per tale sequenza un valore random compreso nel mio caso tra 0 e 9?
Per questo si sceglie un seme con valore molto elevato? per evitare di risalire alla sequenza scelta dal calcolatore?
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Ciao!
Conosci un algoritmo che generi effettivamente una serie di numeri casuali ?
Il processo di generazione casuale, va inizializzato ogni volta, con un valore diverso. Infatti, due serie con lo stesso seme, produrranno sempre la medesima sequenza.
|
|
R1C (Member)
Newbie
Messaggi: 17
Iscritto: 19/03/2011
|
si ok era come pensavo allora.
In sostanza se il seme lo inizializzo a 3000, il calcolatore avra' a disposizione 3000 possibili sequenze, poi una volta fatta la rand genera un valore pseudocasuale ( con l'intervallo a scelta oppure di default ).
Mi si pone un'altra domanda... Ma perche' avere per forza il seme? non si puo' generare un valore rand delimitato da un'intervallo e basta? Il calcolatore non puo' generare un numero casuale in base ad una qualche distribuzione uniforme?
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
|
|
Subazu (Ex-Member)
Newbie
Messaggi: 1
Iscritto: 17/02/2012
|
La generazione dei numeri casuali è molto banale, perché avviene con un equazione di primo grado.
(x mod y è uguale al resto della divisione fra x e y)
y = ((mx + q) mod n) / n
Quando generi un numero casuale inizializzi prima un q, questo rimane costante per tutti i numeri generati (il famoso seme), questo è l'unico numero veramente casuale, perché viene preso dal clock della cpu (che varia in continuazione), dai gradi della scheda madre, o da altri parametri empirici del pc.
N (al numeratore) invece è un numero molto grande che fa si che il risultato del numeratore dell'equazione sia compreso fra 0 e n, di solito è un numero molto grande, come il numero più grande rappresentabile.
Questa equazione restituisce ovviamente un numero da 0 a 1, dato che viene fatta per ultima la divisione per n.
M viene generato calcolando il primo numero primo con n (non numero primo es 2 3 5 7 ma numero primo con n, cioè che non hanno divisori comuni), è di solito è anche questo un numero costante come N deciso a priori e serve a fare in modo che escano tutti i numeri (quelli da 1 a n) prima che questi si ripetano, in pratica.
Ogni volta che ti serve un numero casuale viene dato un valore progressivo ad X (il primo numero che generi ha x = 1, il secondo x = 2 ecc.).
Se fai qualche prova e provi a disegnare l'equazione con qualche programma si riesce a comprendere perfettamente come avviene il tutto.
E' per questo logico che con un seme X venga generata la stessa sequenza di numeri.
Questo è come ricordo avvenga la generazione di numeri casuali, è una spiegazione datami alle superiori, quindi relativamente attendibile, ma in ogni caso plausibile a mio avviso
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Postato originariamente da Subazu:
La generazione dei numeri casuali è molto banale, perché avviene con un equazione di primo grado.
(x mod y è uguale al resto della divisione fra x e y)
y = ((mx + q) mod n) / n |
|
|