MATLAB: Unexpected result from linspace function

floating pointlinspaceMATLAB

Why the result of this code
B1 = 0:0.1:1.8;
B2 = linspace(0,1.8,19)
B1(4)-0.3
B2(4)-0.3
is 5.5511e-17? I found a workaround, which is
B1 = 0:01:18;
B1 = B1/10;
But I am still wondering why the first code does not produce what it should?

Best Answer

Welcome to the wondrous world of floating point numbers. Matlab is a computer program, so it works with binary. Some values are impossible to represent in a binary expansion, so they get rounded. This can be different for each algorithm, so even if the end result can be represented, rounding errors can build up. That is the use case for the eps function: it shows you what the magnitude is of possible errors.
As a decimal example, consider this: (1/3)*3. Assuming I can only store 2 decimal digits, that would be 0.33*3=0.99, even if the correct answer doesn't need 2 decimals.
Related Question