actually other values have a imprecision of n*eps, sometimes n=1, or n=8...
colon operator rounding problem
3 views (last 30 days)
Show older comments
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 !
Accepted Answer
bio lim
on 10 Jul 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 Comments
bio lim
on 10 Jul 2015
Edited: bio lim
on 10 Jul 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.
More Answers (2)
Steven Lord
on 10 Jul 2015
See question 1 in the Mathematics section of the FAQ for a more detailed explanation of this behavior.
0 Comments
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!