# Why 2 vectors are not the same in matlab?

• MATLAB
I have 2 vectors:

a = 1.0e-04*[0.110000000000000 0.140000000000000 0.140000000000000 0.140000000000000];
b = [0.000011000000000 0.000014000000000 0.000014000000000 0.000014000000000];

by look at by eyes, it seems similar; but when I use this command:

a == b

then I got:

ans =
1×4 logical array
0 0 0 0

The expectation is:

ans =
1×4 logical array
1 1 1 1

Does anyone knows what wrong with this command in the matlab?

Thank you.

## Answers and Replies

berkeman
Mentor
I have 2 vectors:

a = 1.0e-04*[0.110000000000000 0.140000000000000 0.140000000000000 0.140000000000000];
b = [0.000011000000000 0.000014000000000 0.000014000000000 0.000014000000000];

by look at by eyes, it seems similar; but when I use this command:

a == b

then I got:

ans =
1×4 logical array
0 0 0 0

The expectation is:

ans =
1×4 logical array
1 1 1 1

Does anyone knows what wrong with this command in the matlab?

Thank you.
Rounding error? What happens if you show the values of the a vector after the multiplication is done? Can you try a shift right by 4 places instead of using the multiplication?

• Mark44
Mark44
Mentor
I have 2 vectors:

a = 1.0e-04*[0.110000000000000 0.140000000000000 0.140000000000000 0.140000000000000];
b = [0.000011000000000 0.000014000000000 0.000014000000000 0.000014000000000];

by look at by eyes, it seems similar; but when I use this command:

a == b

then I got:

ans =
1×4 logical array
0 0 0 0

The expectation is:

ans =
1×4 logical array
1 1 1 1

Does anyone knows what wrong with this command in the matlab?

Thank you.
It's possible that after multiplying each element of a by 10^(-4), what is actually stored in a is slightly different from the numbers stored in b. For example, the first element of a might be something like 0.000011000000002 .
Floating point arithmetic is notorious in this way. Some decimal value are stored exactly, such as 2.5, .75, but others, such as 0.1 are stored in only an approximate form.

• Nate Duong and berkeman
Rounding error? What happens if you show the values of the a vector after the multiplication is done? Can you try a shift right by 4 places instead of using the multiplication?
@berkeman: if I shift right by 4 places instead of using the multiplication, I will have what I want, that is vector [1 1 1 1], that is no surprise, but the thing I am working on is very small number (in nano values 1e-9) and sometime matlab gives me a vector, example: a = 1.0e-04*[ 1 1 1 1] and sometimes a = [0.0001000000 , 0.0001000000, 0.0001000000, 0.0001000000] , that make me confuse and also think about very small numbers are exist (maybe in pico)

It's possible that after multiplying each element of a by 10^(-4), what is actually stored in a is slightly different from the numbers stored in b. For example, the first element of a might be something like 0.000011000000002 .
Floating point arithmetic is notorious in this way. Some decimal value are stored exactly, such as 2.5, .75, but others, such as 0.1 are stored in only an approximate form.
@Mark44: that could be, i am happy if some very small decimal number exist (my expectation in nano or pico values) but is there any way to detect them (if they are exist), even I used command format long and still do not see any change.

olivermsun
Science Advisor
try:
Code:
>> a - b

Also, the MATLAB documentation suggests (under 'eq, ==') a way that avoids the problem when trying to compare floating point numbers:
Compare floating-point numbers using a tolerance, tol , instead of using ==.
Code:
tol = eps(0.5)
abs(C-0) < tol

• berkeman