Floating point number comparison

E

Edward Ulle

I know this is the subject of many prior threads, but, I'm having
trouble comparing floatinp point numbers. Values in registers and
values in memory are not exactly equal, even though they were calculated
identically.

I was wondering if there is a library of functions to compare floating
point numbers, equal, less than, greater than, positive numbers and
negative numbers.

So far I only have one that I have confidence in.

x=y is Abs(x-y)<EPSILON.

Any leads would be appreciated.
 
B

Bernard Liengme

One should never compare two real numbers (aka floating point) for EXACT
equality.
Your approach =ABS(x-y)<=EPSILON is the way to go.
best wishes
 
E

Edward Ulle

Yes, but what about other operations <>, <, >, <= and >=? Has anyone
developed efficient routines to do this? Any floating point number can
be x +/- EPSILON.
 
B

Bernard Liengme

Not sure what you mean.
Case 1, I want to know if x=y
=IF(ABS(x-y)<=1E-6, "equal", "unequal")
Of course, by "equal" I mean that x is within y +- epsilon, and "unequal"
means x is at least epsilon larger/smaller than y

Case 2 I want to know if x is 10 units larger than y
Without worrying about IEEE precision =IF(x-y>=10, "true", "false")
Would I have need to worry about IEEE here?
Suppose x=20 and y = 10.000000000009
Would I want the test to pas or fail?
If I think this should pass: =IF(ROUND(x-y,5)>=10, "true", "false")
I have decided that any difference that round to 10 at 5 place precision is
OK.

Any help?
 
E

Edward Ulle

Basically what I mean is are there any efficient replacements for =, <>,
<, >, <= and >= for floating point number comparison that take into
account EPSILON.

I have developed 6 functions FPEqual, FPNotEqual, etc. that do this but
they may not be the most efficient.

FYI, the macro I've developed is used for an engineering application in
which floating point numbers are the norm and there are thousands of
floating point number comparison performed.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top