Re: Floating Point Precision guidance.

From: Alwyn (dt015a1979_at_mac.com.invalid)
Date: 11/22/04


Date: Mon, 22 Nov 2004 19:40:27 +0000

In article <30dptnF2ukorbU1@uni-berlin.de>, Val \
<chrisval@bigpond.com.au> wrote:
>
> # include <iostream>
> # include <ostream>
> # include <cmath>
>
> static float Epsilon(
> std::numeric_limits<float>::epsilon() );
>
> inline bool IsEqualEnough( float Result, float Comparator,
> float ThreshHold = Epsilon )
> {
> return ( std::fabs( Result ) <= ( Comparator + ThreshHold ) &&
> std::fabs( Result ) >= ( Comparator - ThreshHold ) );
> }

I suggest something like:

bool fNearlyEq(float u, float v, float e)
{
   float diff = fabs(u - v);
   return diff / fabs(u) <= e && diff / fabs(v) <= e;
}

and:

bool fRoughlyEq(float u, float v, float e)
{
   float diff = fabs(u - v);
   return diff / fabs(u) <= e || diff / fabs(v) <= e;
}

which have been adapted from Knuth, vol. 2.

Alwyn



Relevant Pages