even worse: abs(100-99.9-0.1)>eps is true, so the precision error for this particular calculation is larger than eps
precision problem in simple subtraction?!?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Stefan
el 29 de Mayo de 2015
Editada: John D'Errico
el 29 de Mayo de 2015
Hi everybody Just stumbled upon a "bug" i cannot really explain. Let's test a simple subtraction: 1 - 0.8 - 0.2 my matlab tells me -5.5511e-17 If I switch the numbers, 1 - 0.2 - 0.8, it correctly results in 0. Strange enough, the result is smaller than eps (2-2204e-16 in my case), so why is it not 0? In my case such a calculation inside a log function results in complex results, due to the negative sign, leading to various errors if I try to e.g. plot the data! What's happening here? I tried it in different matlab instances, different PCs, I even tried it on a mac! A similar phenomenons can be observed calculating e.g. 1 - 0.7 -0.3 Same thing happens if the subtraction is performed with 3 single variables resulting in an error of -1.4901e-08.
2 comentarios
John D'Errico
el 29 de Mayo de 2015
Editada: John D'Errico
el 29 de Mayo de 2015
But that just shows you don't understand eps either.
abs(100-99.9-0.1)>eps(100)
ans =
0
If you will use floating point arithmetic, it is a good idea to understand it.
Respuesta aceptada
Más respuestas (1)
Jos (10584)
el 29 de Mayo de 2015
Editada: Jos (10584)
el 29 de Mayo de 2015
Simple for you, but not for a computer! Using only binary representations and a limited memory system a computer cannot store numbers like 0.99 exactly without special tricks and therefore makes small but significant round-off errors. And this makes the order of operations also important
x = 0.99 % simple number!
sprintf('%.30f', x) % see how it is stored inside your computer
% mathematical identical operations
a = 1-x-0.01
b = (x+0.01)-1
sprintf('%.30f', a)
sprintf('%.30f', b)
2 comentarios
James Tursa
el 29 de Mayo de 2015
Note that the sprintf('%.30f', x) trick may not work on Windows. You may have to use this FEX submission instead:
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!