|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 823
|
[C++] Generare un numero random
come si fa a generare un numero random in C++? quali file si devono includere?
Grazie in anticipo |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
Codice:
#include <time.h> srand(time(NULL)); a=rand()%range; La funzione restituisce un int tra 0 e range Codice:
rand()%range-range; // Numeri negativi rand()%range-range/2; // Numeri positivi e negativi nell'intorno di 0 con massimo in range/2 |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 823
|
grazie.
che significa srand(time(null)); ? |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 823
|
grazie a tutti e due gli andrea
![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Feb 2001
Città: Firenze
Messaggi: 516
|
In questa pagina (http://members.cox.net/srice1/random/crandom.html) ci sono delle precisazioni molto interessanti per ottenere un numero casuale in maniera corretta.
In particolare si sottolinea questo: Quote:
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
io come al solito ho: Accesso negato ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2001
Città: Firenze
Messaggi: 516
|
Quella pagina lo spiega in modo esauriente, a me funziona, ho appena provato.
Comunque in sintesi facendo il modulo si ottiene una correlazione tra il numero generato con solo i bit inferiori restituiti da rand() che "generalmente" sono molto meno casuali dei bit superiori. Ovviamente e' possibile che la specifica implementazione di rand() delle librerie che si vanno ad utilizzare abbia un comportamento diverso (eventualmente migliore). Le formule indicate nella pagina citata servono per essere sicuri di utilizzare comunque tutti i bit generati da rand() a prescindere dall'implementazione. Ciao ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
se i bit inferiori sono meno casuali avrai una differenza sul numero di probabilitá che riesca un dato numero. Non la totale assenza di quel numero. O forse ho capito male ? ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#10 | ||
Senior Member
Iscritto dal: Feb 2001
Città: Firenze
Messaggi: 516
|
Quote:
I suggerimenti dati a quella pagina li ho gia' applicati con successo diverse volte. Quote:
Questo pero' e' un punto fondamentale e da non trascurare quando si utilizzano numeri casuali in applicazioni in ambito sicurezza. Analogamente se servono numeri casuali per la generazioni di "eventi" per testare un qualche tipo di procedura o algoritmo o altro, se i numeri generati non sono sufficientemente "buoni", tutta la procedura di test o di misurazione potrebbe risultare invalidata. Sempre nella stessa pagina vengono fatti notare anche alcuni rischi di overflow da tenere presenti e risolvibili con alcuni cast espliciti. Ciao ![]() |
||
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() Comunque ho fatto un programmino di test su numeri da 0 a 9, 1000 volte e sembra tutto ok. Codice:
Mat[0]: <97> Mat[1]: <100> Mat[2]: <96> Mat[3]: <99> Mat[4]: <101> Mat[5]: <107> Mat[6]: <82> Mat[7]: <113> Mat[8]: <110> Mat[9]: <95> ![]() ciao ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Feb 2001
Città: Firenze
Messaggi: 516
|
Controlla anche in che sequenza ti escono i numeri, potrebbe avere delle periodicita'' che con il tuo test non vedi (su quel sito dice che potrebbero uscire alternati pari-dispari)
Ciao ![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 823
|
alcuni usano
#define RAND_MAX 50 x = rand(); (non so se funziona) |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
EDIT: alt, bisogna anche vedere come è stata implementata la rand()!!!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 29-06-2006 alle 13:31. |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 823
|
un mio amico mi ha dato un codice con rand_max che effettivamente faceva restituire a rand un valore entro rand_max...
![]() ![]() ![]() |
![]() |
![]() |
![]() |
#18 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
![]() E se si hanno idee, suggerimenti, avvisi, lamentele ecc., si è i benvenuti ![]()
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 823
|
oops
![]() |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Ci ho provato (#define RAND_MAX 10) mi da giustamente un warning sulla define ma poi non me la caga proprio ![]() Non mi considera proprio ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:08.