Why two equal numbers are not equal?
Ältere Kommentare anzeigen
Hello everyone,
I had some difficulties comparing some numbers and the problem is simply summarized below :

So can someone tell me why and how this can happen? And how to avoid this kind of problem in the future if possible.
Thank you.
Akzeptierte Antwort
Weitere Antworten (2)
James Tursa
am 14 Dez. 2016
Bearbeitet: James Tursa
am 14 Dez. 2016
Already answered by others, but here is a detailed decimal conversion of what is going on with your particular example:
>> num2strexact(0.65)
ans =
0.65000000000000002220446049250313080847263336181640625
>> num2strexact(0.05)
ans =
5.000000000000000277555756156289135105907917022705078125e-2
>> num2strexact(0.05*17)
ans =
0.850000000000000088817841970012523233890533447265625
>> num2strexact(0.65+0.05*17)
ans =
1.5
>>
>> num2strexact(0.3)
ans =
0.299999999999999988897769753748434595763683319091796875
>> num2strexact(0.05)
ans =
5.000000000000000277555756156289135105907917022705078125e-2
>> num2strexact(0.05*24)
ans =
1.20000000000000017763568394002504646778106689453125
>> num2strexact(0.3+0.05*24)
ans =
1.5000000000000002220446049250313080847263336181640625
So, you got lucky in one case and unlucky in the other case. You can find num2strexact on the FEX here:
michio
am 14 Dez. 2016
0 Stimmen
It's usually recommended to compare floating-point numbers using a tolerance, tol, instead of using ==.
1 Kommentar
Steven Lord
am 14 Dez. 2016
Kategorien
Mehr zu Physics finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!