[Octave] Problema col confronto != in Octave
Ciao a tutti!
Sto scrivendo un programma per cui necessito di confrontare due celle di una matrice, in particolare la parte problematica è questo ciclo for:
Siccome il programma mi dava risultati inaspettati, ho provato a fargli stampare i contenuti delle celle che secondo lui erano diversi, e mi ha restituito:
Ho fatto diverse ipotesi, e quella più probabile mi sembra quella di troncamento nella rappresentazione...ovvero i due numeri sono diversi andando avanti con le cifre decimali, ma non visualizzando solo le prime 6. Ho dato il comando
ma oltre a quelle 6 non va...ci sono altri modi?
In realtà io mi aspettavo che quei valori fossero uguali, ma non riesco a spiegarmi quel risultato se non con la pazzia del mio computer.
Ringrazio in anticipo chiunque cerchi di aiutarmi.
Sto scrivendo un programma per cui necessito di confrontare due celle di una matrice, in particolare la parte problematica è questo ciclo for:
for i=a:b count=1; x0=mat(100,i); k=99; while(mat(k,i)!=x0 && k>2) printf("%f != %f \n ", mat(k,i), x0); count=count+1; k=k-1; endwhile x(i-a+1)=count; i++; endfor
Siccome il programma mi dava risultati inaspettati, ho provato a fargli stampare i contenuti delle celle che secondo lui erano diversi, e mi ha restituito:
0.365340 != 0.365340
Ho fatto diverse ipotesi, e quella più probabile mi sembra quella di troncamento nella rappresentazione...ovvero i due numeri sono diversi andando avanti con le cifre decimali, ma non visualizzando solo le prime 6. Ho dato il comando
format long
ma oltre a quelle 6 non va...ci sono altri modi?
In realtà io mi aspettavo che quei valori fossero uguali, ma non riesco a spiegarmi quel risultato se non con la pazzia del mio computer.
Ringrazio in anticipo chiunque cerchi di aiutarmi.
Risposte
Ragazzi non capisco...sono riuscita a confrontarli con 15 cifre e sono ancora uguali. Perchè diavolo mi dice che sono diversi???
Per molte ragioni è sconsigliabile confrontare due numeri in virgola mobile in questo modo. Ci sono un sacco di motivi per cui un risultato potrebbe non venire esattamente quello aspettato. La soluzione normalmente adottata è quella di verificare se i due numeri differeriscono per un valore inferiore ad un qualche epsilon (per esempio \(10^{-6}\)). Il valore ovviamente dipende da quello che si desidera fare e si potrebbe volerlo far dipendere dai due valori confrontati.
Ti ringrazio, in effetti non ci avevo pensato a risolvere cosi'!