|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 21
|
[C++] Output differente dallo stesso input (senza uso di srand() )
ciao... ho un dubbio sulla mia applicazione in C++..
Usando lo stesso input, sulla stessa macchina, senza ricompilare, il più delle volte ottengo degli output molto, molto (ma non del tutto) simili ma talvolta ottengo output "abbastanza" diversi. Uso estensivamente l'algoritmo STL random_shuffle() ed a volte le chiamate a rand() ma non "resetto" mai il seme con srand(). Come può essere ??? Può dipendere da una libreria esterna che utilizzo per l'ottimizzazione matematica (GLPK) ??? Grazie a quanti sapranno indicarmi un punto dal quale partire... un saluto, sylvaticus |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Non ho ben capito cosa vorresti.
Se li vuoi uguali tutte le volte (tipicamente per test), allora piazza uno srand fisso all'inizio (ES: srand(144) Se invece li vuoi "diversi" tutte le volte piazzaci uno srand ( time(NULL) ); O comunque uno srand diverso di volta in volta. Tipicamente si usano valori del timer, o numero di secondi a partire dalla tua data di nascita, o altro...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 21
|
Quote:
Questo credo equivalga a fare una chiamata a srand "fisso"... Il problema è che nonostante non abbia nessun srand() i risultati mi vengono diversi a parità di input :-((( |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Be, prova a piazzare uno srand fisso, oppure prova a vedere se la liberia offre una chiamata analoga.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 21
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 21
|
fatto, ma inutile. Continua a dare risultati uguali alla virgola nel 20% dei casi e leggermente differenti nel restante 80%... :-(((
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
posta se puoi il tuo codice
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 21
|
Sono riuscito ad isolare il problema ( o almeno credo)..
Spesso utilizzo delle chiamate a rand() simili a quelle in questo loop: Codice:
double ddebug;
uint idebug=0;
double debugmin = 0;
double debugmax = 1000;
for (uint i=0;i<10000;i++){
ddebug += debugmin + ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) )*(debugmax-debugmin+1);
}
idebug = ddebug;
std::cout << "idebug: "<<idebug<<std::endl;
Utilizzo le Qt4 ed ho provato ad inserirlo nel run() dell'esempio del mandelbrot, e pure lì ogni tanto "sgarra". E' un problema delle Qt ???? |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
non ho idea.. ma solitamente gli EDT (Ebent Diapstcher Thread) delle librerie grafiche non sono mai un buon posto dove metere del codice che non ha niente a che fare con l'interfaccia grafica
__________________
|
|
|
|
|
|
|
#11 | |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 21
|
Quote:
Vuol dire che c'è qualcosa nella GUI che gli da fastidio.. ma qual'è allora un approccio corretto in un modello dove la GUI serve solo per "visualizzare" lo stato di un modello e farlo partire con i soliti start/pause/stop ??? Ero riuscito a fare due thread separati, uno per la GUI ed uno per il modello, ma vedo che condividendo l'area di memoria se c'è una qualche cappella nella GUI questa può propagarsi nel modello... |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La prima soluzione che mi viene in mente è: usa un generatore di numeri casuali indipendente da quello della libreria standard. Almeno te lo gestisci come ti pare.
Ne trovi tanti online. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:38.




















