summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/autotrace/epsilon-equal.c
blob: 8d2688600485b857ace1db2b86089a6744647152 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* epsilon-equal.c: define a error resist compare. */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* Def: HAVE_CONFIG_H */

#include "types.h"
#include "epsilon-equal.h"
#include <math.h>

/* Numerical errors sometimes make a floating point number just slightly
   larger or smaller than its TRUE value.  When it matters, we need to
   compare with some tolerance, REAL_EPSILON, defined in kbase.h.  */

gboolean epsilon_equal(gfloat v1, gfloat v2)
{
  if (v1 == v2                  /* Usually they'll be exactly equal, anyway.  */
      || fabs(v1 - v2) <= REAL_EPSILON)
    return TRUE;

  return FALSE;
}