colon operator rounding problem

1 visualización (últimos 30 días)
Ambroise
Ambroise el 10 de Jul. de 2015
Editada: Stephen23 el 10 de Jul. de 2015
Hello everyone!
I encountered a problem in one of my code, using the semi colon operator like this:
a = 0:0.1:120;
will not give me exactly what I want, it does return 0, 0.1, 0.2 etc, but with a small imprecision (equal to eps actually)
the following code :
a = 0:0.1:120;
disp(a(20));
disp(a(20)-1.9)
isequal(a(20),1.9)
is returning:
1.9
2.22044604925031e-16
ans =
0
Any help ? I really need this isequal(a(20),1.9) to return 1...
thanks !
  2 comentarios
Ambroise
Ambroise el 10 de Jul. de 2015
actually other values have a imprecision of n*eps, sometimes n=1, or n=8...

Iniciar sesión para comentar.

Respuesta aceptada

bio lim
bio lim el 10 de Jul. de 2015
Try it like this.
a=(0:1200)/10;
disp(a(20));
disp(a(20)-1.9);
isequal(a(20),1.9)
Your previous code was not returning 1 because of rounding errors when doing finite precision arithmetic.
  3 comentarios
Ambroise
Ambroise el 10 de Jul. de 2015
and actually a=(0:1200)*0.1;
disp(a(20));
disp(a(20)-1.9);
isequal(a(20),1.9)
doesnt work but this works
a=(0:1200)/(1/0.1);
disp(a(20));
disp(a(20)-1.9);
isequal(a(20),1.9)
bio lim
bio lim el 10 de Jul. de 2015
Editada: bio lim el 10 de Jul. de 2015
If you multiply it by decimals, such as 0.1, again you get rounding errors. That is why, I specifically wrote 10 in the first place. If you actually check your initial code, you can see that until a(4), it returns 0 but starts getting rounding error from that point.
1/0.1 returns 10 because, 1 is defined and when you divide you are going to get 10 without a rounding error.

Iniciar sesión para comentar.

Más respuestas (2)

Thorsten
Thorsten el 10 de Jul. de 2015
Editada: Thorsten el 10 de Jul. de 2015
Use
a = linspace(0, 120, 1201);
But in general don't use
a(20) == 1.9
but
abs(a(20) - 1.9) <= eps
If you don't want to do it this way, just define
a(20) = 1.9;

Steven Lord
Steven Lord el 10 de Jul. de 2015
See question 1 in the Mathematics section of the FAQ for a more detailed explanation of this behavior.

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by