MATLAB Answers

1.0010 DOES NOT EQUAL 1.0010

8 views (last 30 days)
Jeff
Jeff on 10 Nov 2011
Hi all,
I have a segment of code that is evaluating curfactor(sc) == 1.0010 as 0 when curfactor(sc) == 1.0010 (should evaluate as 1). Both numbers are exactly 1.0010. I checked the class of both numbers and they are both double. What on Earth is happening here?!
I should note that curfactor is an array of size 1x3, and is defined at the very beginning of the function. The expression that is being evaluated is nested within 2 other helper functions. Maybe it's a scope issue? In any case, someone's breath stinks here, and it's certainly not mine.
Jeff

  0 Comments

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 10 Nov 2011
Jeff: Read the FAQ and then come back: http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F Like you said, it IS a scope issue, and I'd recommend Scope mouthwash for you - it's an excellent mouthwash.

  1 Comment

Jeff
Jeff on 10 Nov 2011
Cheers. I will use a tolerance value instead of making a direct comparison.
Readers Beware: I used the round2 function from the Mathworks File Exchange to obtain a number of arbitrary precision and stored it in curfactor(sc). When using this function, take caution that the number is not rounded exactly to the precision specified, there may be hidden bits.

Sign in to comment.

More Answers (2)

bym
bym on 10 Nov 2011
did you check that they were exactly equal with a variable precision package like the symbolic toolbox?

  2 Comments

Teja Muppirala
Teja Muppirala on 10 Nov 2011
Using "format hex" will also show the difference:
format hex
X = [(0.1+0.2); 0.3]
Jeff
Jeff on 10 Nov 2011
Thanks for the tip!

Sign in to comment.


Friedrich
Friedrich on 10 Nov 2011

  1 Comment

Jeff
Jeff on 10 Nov 2011
Thanks, I'll have a look at it.

Sign in to comment.

Sign in to answer this question.