Why 2 vectors are not the same in matlab?

  • #1
126
3

Main Question or Discussion Point

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

  • #2
berkeman
Mentor
56,670
6,564
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?
 
  • #3
33,186
4,870
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.
 
  • #4
126
3
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)
 
  • #5
126
3
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.
 
  • #6
olivermsun
Science Advisor
1,244
117
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
 

Related Threads for: Why 2 vectors are not the same in matlab?

Replies
6
Views
1K
Replies
11
Views
2K
  • Last Post
Replies
1
Views
2K
Replies
3
Views
1K
  • Last Post
Replies
2
Views
1K
  • Last Post
Replies
2
Views
3K
  • Last Post
Replies
3
Views
910
  • Last Post
Replies
0
Views
1K
Top