PDA

View Full Version : [MatLab] Perchè accade questo?


Fire Fox II
04-11-2005, 15:43
Salve raga :)

Qualcuno potrebbe spiegarmi perchè questa semplice porzione di codice in matlab porta ad un loop infinito?


a=0
while a~=1.0
a=a+0.1
end


C'è qualcosa che ha a che fare con la precisione di macchina, ma non risco cmq a spiegarmi il motivo :(

Thanks :)

Bonfo
04-11-2005, 15:55
a(bisciolina)=1.0 non mi sembra un gran test...
...che dite???

Fenomeno85
04-11-2005, 16:24
a = 0;
while a<=1.1
a=a+0.1
end

testato e funziona :O

~§~ Sempre E Solo Lei ~§~

Fire Fox II
04-11-2005, 18:55
a(bisciolina)=1.0 non mi sembra un gran test...
...che dite???

a = 0;
while a<=1.1
a=a+0.1
end

testato e funziona :O

~§~ Sempre E Solo Lei ~§~

Beh, questo lo so!

Ma io non sto cercando di risolvere l'esercizio; vorrei semplicemente capire perchè non funziona quel "gran test" (Bonfo docet :D ) in MatLab :)

redcloud
04-11-2005, 19:25
Spiegati meglio.

P.s. ma perchè con altri linguaggi funziona il test?

wisher
05-11-2005, 11:04
il problema è dovuto alla codifica dei float...
in pratica ogni float nella conversione in binario viene approssimato e questo porta quasi sicuramente a perdita dell'informazione.
se ti interessa la codifica utilizzata cerca IEEE 754 (lo standard utilizzato)
i cicli di solito vanno fatti on gli int per evitare questo problema.

Ziosilvio
05-11-2005, 16:19
Quoto wisher: la virgola mobile va bene per rappresentare un grande intervallo di numeri, ma introduce grossi errori con la somma.
Il risultato è che, se fai delle addizioni, allora in genere non puoi valutare un'uguaglianza con un valore previsto, ma devi ricorrere a una maggiorazione della distanza tra il valore attuale e quello previsto.
Ossia, se hai una tolleranza t, allora devi usare la condizione "abs(x-x0)<t" invece di "x==x0".