[Octave] Problema col confronto != in Octave

morenaria
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:

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
morenaria
Ragazzi non capisco...sono riuscita a confrontarli con 15 cifre e sono ancora uguali. Perchè diavolo mi dice che sono diversi???

apatriarca
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.

morenaria
Ti ringrazio, in effetti non ci avevo pensato a risolvere cosi'!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.