Why doesn't .3 - .2 - .1 = 0
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
I was bored yesterday at work and I was playing around with some decimal numbers when I stumbled across something I thought was pretty interesting.
.3 - .2 - .1 != 0
but
.2 - .1 - .1 = 0
then I began to run some other tests and I found out that only .3 and .8 are the only numbers that you use that'll not get you a 0 answer. If you take:
.4 - .2 - .1 - .1 = 0
and
.9 -.2 -.1 -.1 -.1 -.2 -.1 -.1 = 0
If you change any of the .2's to two - .1's you don't get 0. So what’s so special about those 2 decimals that make them the only ones that don't work with basic subtraction?
0 comentarios
Respuesta aceptada
Matt J
el 9 de Nov. de 2012
Editada: Matt J
el 9 de Nov. de 2012
What makes them special? Nothing. There are lots more numbers like that
>> isequal(0, .7 - .5 - .2)
ans =
0
It also depends on the operation you do. Sometimes 0.3 will work fine, e.g.,
>> isequal(0, .6 - .3 -.3)
ans =
1
2 comentarios
Matt Fig
el 9 de Nov. de 2012
It is not just in MATLAB. ALL numerical systems that follow IEEE 754 will behave this way. That is the standard.
Más respuestas (1)
Thomas
el 9 de Nov. de 2012
Editada: Thomas
el 9 de Nov. de 2012
This should answer your question. Look at the wiki under the section Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero? (might have to scroll on the page to locate...)
2 comentarios
Dr. Seis
el 9 de Nov. de 2012
Editada: Dr. Seis
el 9 de Nov. de 2012
I had similar issues when doing mod(0.4,0.4) and mod(0.8,0.4) returning a number slightly smaller than 0.4 instead of 0. Whenever I do these types of comparisons in the future I will need to overload the builtin functions.
See this for example: http://www.mathworks.com/matlabcentral/answers/49910-mod-bug-or-something-else
Oleg Komarov
el 9 de Nov. de 2012
@Lucas, if you already know that you wouldn't be asking the question in the first place. I recommend to read the FAQ more carefully.
Ver también
Categorías
Más información sobre Variables en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!