don't try to create non-standard denormalization signal

Underflow exception is only raised when the result is
invalid, but fmod is always exact. x87 has a denormalization
exception, but that's nonstandard. And the superflous *1.0
will be optimized away by any compiler that does not honor
signaling nans.
This commit is contained in:
nsz 2012-03-19 23:30:45 +01:00
parent 75483499da
commit 4caa17b2a1
3 changed files with 4 additions and 7 deletions

View File

@ -17,7 +17,7 @@
#include "libm.h"
static const double one = 1.0, Zero[] = {0.0, -0.0,};
static const double Zero[] = {0.0, -0.0,};
double fmod(double x, double y)
{
@ -140,7 +140,6 @@ double fmod(double x, double y)
lx = hx>>(n-32); hx = sx;
}
INSERT_WORDS(x, hx|sx, lx);
x *= one; /* create necessary signal */
}
return x; /* exact output */
}

View File

@ -20,7 +20,7 @@
#include "libm.h"
static const float one = 1.0, Zero[] = {0.0, -0.0,};
static const float Zero[] = {0.0, -0.0,};
float fmodf(float x, float y)
{
@ -99,7 +99,6 @@ float fmodf(float x, float y)
n = -126 - iy;
hx >>= n;
SET_FLOAT_WORD(x, hx|sx);
x *= one; /* create necessary signal */
}
return x; /* exact output */
}

View File

@ -48,7 +48,7 @@ typedef uint32_t manh_t;
#define MANL_SHIFT (LDBL_MANL_SIZE - 1)
static const long double one = 1.0, Zero[] = {0.0, -0.0,};
static const long double Zero[] = {0.0, -0.0,};
/*
* fmodl(x,y)
@ -153,7 +153,6 @@ long double fmodl(long double x, long double y)
} else {
ux.bits.exp = iy + BIAS;
}
x = ux.e * one; /* create necessary signal */
return x; /* exact output */
return ux.e; /* exact output */
}
#endif