Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - drand48()...........
Forum - C/C++ - drand48()...........

Avatar
R1C (Member)
Newbie


Messaggi: 17
Iscritto: 19/03/2011

Segnala al moderatore
Postato alle 17:04
Sabato, 28/04/2012
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?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 17:20
Sabato, 28/04/2012
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.


PM Quote
Avatar
R1C (Member)
Newbie


Messaggi: 17
Iscritto: 19/03/2011

Segnala al moderatore
Postato alle 17:50
Sabato, 28/04/2012
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?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 18:25
Sabato, 28/04/2012
Il computer non può decidere autonomamente nulla.
Se inizializzi una sequenza a 3000, non crei 3000 possibili sequenze.
Semplicemente, ad ogni riavvio del programma, verrà generata la solita sequenza.

Per ovviare a ciò, vedi: http://www.cplusplus.com/reference/clibrary/cstdlib/srand/

PM Quote
Avatar
Subazu (Ex-Member)
Newbie


Messaggi: 1
Iscritto: 17/02/2012

Segnala al moderatore
Postato alle 20:58
Sabato, 28/04/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 :rofl::rofl:

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:10
Sabato, 28/04/2012
Testo quotato

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


Questa equazione, genera una sequenza di numeri equamente distribuita in un dato intervallo, ma ogni elemento, è legato al precedente mediante una relazione  facilmente prevedibile.

Un esempio più sicuro è questo:http://it.wikipedia.org/wiki/Generatore_lineare_congruenziale

PM Quote