# Problem finding the index?

12 views (last 30 days)
UPPALA SRINU on 6 Dec 2019
Commented: UPPALA SRINU on 6 Dec 2019
I am facing a surprising problem. I assigned a range of values for a variable t=-10:0.2:89.8. When I am finding index of 30 by doing find(t==30) its printing 201.
But while finding the index of 40 by find(t==40) its printing 1x0 empty double row vector instead of 251. Why this problem is occuring?

ME on 6 Dec 2019
The problem is the precision which which your machine is able to store numbers. You are asking MATLAb to find an exact match to t=40, but when you open up the variable browser (or whatever it is called) and double click on the t = 40 box then you can see that it is actually stored as t = 39.999999999999990.
You'd probably be better off trying to find a value extremely close to t = 40 as this will find the right index.
##### 2 CommentsShowHide 1 older comment
Stephen23 on 6 Dec 2019

### More Answers (3)

Ok, a problem of precision, I will edit the previous answer to have the complete solution

Edited: Constantino Carlos Reyes-Aldasoro on 6 Dec 2019
Hello, you have a very subtle problem, and it is that you do not have a value of 40 in your matrix. If you see the value of location 251 like this:
>> t (251)
ans =
40.0000
you see that is not the same as when you try 201
>> t (201)
ans =
30
Notice all the zeros after the decimal point in 251? To probe further you can subtract 40 from the value stored in 251:
>> t (251)-40
ans =
-7.1054e-15
so you will have that the value stored there is NOT 40 but 40.0000000 ... 0000015. You can fix this easily by changing the definition of t like this
>> t=-10:0.2:90;
and then try again
>> find(t==40)
ans =
251
Alternatively, you can change the precision of t from the beginning like this
>> t=round(10*(-10:0.2:90))/10;
by doing the rounding you have eliminated all the 0.0000000 parts of the vector, then you divide and return to your original precision and then it should work fine:
>> find(t==39.8)
ans =
250
Problem sorted.
##### 2 CommentsShowHide 1 older comment
UPPALA SRINU on 6 Dec 2019
Yes, now its fine.
[x,y]=min(abs(t-40)); also works in this case where y is the index.
Thank You.

UPPALA SRINU on 6 Dec 2019
By assigning it as t=-10:0.2:90 then also for find(t==39.8) it shows empty vector.
Because 39.8 is stored as 39.8000000000000004.
Thank You.