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 :)
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?
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".
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.