From 4caa17b2a17d136efedfb63fceef832401063d70 Mon Sep 17 00:00:00 2001 From: nsz Date: Mon, 19 Mar 2012 23:30:45 +0100 Subject: 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. --- src/math/fmod.c | 3 +-- src/math/fmodf.c | 3 +-- src/math/fmodl.c | 5 ++--- 3 files changed, 4 insertions(+), 7 deletions(-) (limited to 'src/math') diff --git a/src/math/fmod.c b/src/math/fmod.c index 6856844e..84a1b4ac 100644 --- a/src/math/fmod.c +++ b/src/math/fmod.c @@ -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 */ } diff --git a/src/math/fmodf.c b/src/math/fmodf.c index 4b50a3d3..837e9371 100644 --- a/src/math/fmodf.c +++ b/src/math/fmodf.c @@ -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 */ } diff --git a/src/math/fmodl.c b/src/math/fmodl.c index 2e3eec1f..b930c49d 100644 --- a/src/math/fmodl.c +++ b/src/math/fmodl.c @@ -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 -- cgit v1.2.1