Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
BOOX Go 6 Gen II porta per la prima volta il supporto allo stilo su un e-reader da 6 pollici, affiancando 3 GB di RAM al collaudato Snapdragon 665 e un design rivisto con scocca posteriore a costolature. Su carta la proposta è interessante, ma Android 11 fuori supporto, l'assenza di un alloggiamento per il pennino e un'autonomia ridotta rispetto agli e-reader tradizionali sono i compromessi da accettare
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-02-2008, 08:17   #1
sylvaticus
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
sylvaticus è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 09:14   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 11:57   #3
sylvaticus
Junior Member
 
Iscritto dal: Nov 2007
Messaggi: 21
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
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...
no.. io li vorrei tutti uguali e non ho nessuna chiamata a srand().
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 :-(((
sylvaticus è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 12:00   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
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.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 12:21   #5
sylvaticus
Junior Member
 
Iscritto dal: Nov 2007
Messaggi: 21
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Be, prova a piazzare uno srand fisso, oppure prova a vedere se la liberia offre una chiamata analoga.
..grazie.. ora sto provando con uno fisso (avevo provato inserendo srand(1) ogni volta che chiamavo rand(), ma era sbagliato..)
sylvaticus è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 12:35   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da sylvaticus Guarda i messaggi
..grazie.. ora sto provando con uno fisso (avevo provato inserendo srand(1) ogni volta che chiamavo rand(), ma era sbagliato..)
Devi fare srand(1) solo una volta all'inizio del tuo programma.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 18:28   #7
sylvaticus
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%... :-(((
sylvaticus è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 22:01   #8
wizard1993
Senior Member
 
L'Avatar di wizard1993
 
Iscritto dal: Apr 2006
Messaggi: 22462
Quote:
Originariamente inviato da sylvaticus Guarda i messaggi
fatto, ma inutile. Continua a dare risultati uguali alla virgola nel 20% dei casi e leggermente differenti nel restante 80%... :-(((
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
wizard1993 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2008, 23:21   #9
sylvaticus
Junior Member
 
Iscritto dal: Nov 2007
Messaggi: 21
Quote:
Originariamente inviato da wizard1993 Guarda i messaggi
posta se puoi il tuo codice
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;
La cosa strana è che utilizzo questo codice subito dopo il main() mi dà sempre lo stesso risultato, ma se lo metto, anche all'inizio, del mio "run()" a volte mi sgarra numero..
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 ????
sylvaticus è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2008, 03:01   #10
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da sylvaticus Guarda i messaggi
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;
La cosa strana è che utilizzo questo codice subito dopo il main() mi dà sempre lo stesso risultato, ma se lo metto, anche all'inizio, del mio "run()" a volte mi sgarra numero..
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 ????
ehmm...
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
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2008, 11:41   #11
sylvaticus
Junior Member
 
Iscritto dal: Nov 2007
Messaggi: 21
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
ehmm...
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
Accidenti.. in effetti riscrivendo il main() in modo da "saltare" la GUI mi funzia..
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...
sylvaticus è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2008, 11:49   #12
cionci
Senior Member
 
L'Avatar di cionci
 
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea Oltre il contante e le crypto: tutto sull'Euro D...
3 Samsung Galaxy in offerta su Amazon: S...
Volvo EX60, primo test drive: ammiraglia...
SpaceX ha lanciato il razzo spaziale Sta...
Anthropic lancia Claude Opus 5: eclissa ...
Batterie a terra per Varta, bancarotta v...
Elon Musk: l'intelligenza artificiale su...
Ryzen 7 9800HX3D: il miglior processore ...
Google porta Gemini Live sui vecchissimi...
Corsair Platform:4 in offerta: la scriva...
Il creatore di Disagea sull'addio dei gi...
Fastweb + Vodafone entra nello SmartCity...
AI Act europeo: dal 2 agosto partono i n...
Da 1,3 a 10 miliardi in due mesi: chi è ...
Schede video RTX: NVIDIA comunica nuovi ...
GTA 6, i 60 fps stabili potrebbero esser...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v