[Octave] Problema col confronto != in Octave

Messaggioda morenaria » 13/04/2017, 16:14

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:

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

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

Codice:
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.
morenaria
Starting Member
Starting Member
 
Messaggio: 20 di 44
Iscritto il: 14/01/2016, 22:41

Re: [Octave] Problema col confronto != in Octave

Messaggioda morenaria » 13/04/2017, 16:24

Ragazzi non capisco...sono riuscita a confrontarli con 15 cifre e sono ancora uguali. Perchè diavolo mi dice che sono diversi???
morenaria
Starting Member
Starting Member
 
Messaggio: 21 di 44
Iscritto il: 14/01/2016, 22:41

Re: [Octave] Problema col confronto != in Octave

Messaggioda apatriarca » 13/04/2017, 16:33

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4598 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [Octave] Problema col confronto != in Octave

Messaggioda morenaria » 14/04/2017, 14:43

Ti ringrazio, in effetti non ci avevo pensato a risolvere cosi'!
morenaria
Starting Member
Starting Member
 
Messaggio: 22 di 44
Iscritto il: 14/01/2016, 22:41


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron