Browse Source

rewrite AlmostEqualUlps() to avoid compiler warnings concerning `strict-aliasing'

pre-master-46
Henrik Forstén 13 years ago
committed by rlar
parent
commit
9c04f01991
  1. 11
      src/maths/misc/equality.c

11
src/maths/misc/equality.c

@ -24,6 +24,11 @@ bool AlmostEqualUlps(double A, double B, int maxUlps)
{
int64_t aInt, bInt, intDiff;
union {
double d;
int64_t i;
} uA, uB;
if (A == B)
return TRUE;
@ -34,12 +39,14 @@ bool AlmostEqualUlps(double A, double B, int maxUlps)
/* default NAN won't compare as equal to anything. */
assert(maxUlps > 0 && maxUlps < 4 * 1024 * 1024);
aInt = *(int64_t*)&A;
uA.d = A;
aInt = uA.i;
/* Make aInt lexicographically ordered as a twos-complement int */
if (aInt < 0)
aInt = int64_min - aInt;
bInt = *(int64_t*)&B;
uB.d = B;
bInt = uB.i;
/* Make bInt lexicographically ordered as a twos-complement int */
if (bInt < 0)
bInt = int64_min - bInt;

Loading…
Cancel
Save