diff options
author | Szabolcs Nagy <nsz@port70.net> | 2012-11-13 10:12:07 +0100 |
---|---|---|
committer | Szabolcs Nagy <nsz@port70.net> | 2012-11-13 10:12:07 +0100 |
commit | 662ed2006568f953290f5e0b40cce38252db78f4 (patch) | |
tree | 723999263be1ccb50d7d312f1d050c24a7659e47 /src/math | |
parent | cfbaba79a2dd380e580a247b8fd36af60c878e8f (diff) | |
download | musl-662ed2006568f953290f5e0b40cce38252db78f4.tar.gz musl-662ed2006568f953290f5e0b40cce38252db78f4.tar.bz2 musl-662ed2006568f953290f5e0b40cce38252db78f4.tar.xz musl-662ed2006568f953290f5e0b40cce38252db78f4.zip |
math: fix nextafter and nexttoward on maxdbl and maxflt input
old code (return x+x;) returns correct value and raises correct
flags only if the result is stored as double (or float)
Diffstat (limited to 'src/math')
-rw-r--r-- | src/math/nextafter.c | 2 | ||||
-rw-r--r-- | src/math/nextafterf.c | 2 | ||||
-rw-r--r-- | src/math/nexttoward.c | 2 | ||||
-rw-r--r-- | src/math/nexttowardf.c | 2 |
4 files changed, 4 insertions, 4 deletions
diff --git a/src/math/nextafter.c b/src/math/nextafter.c index a3b42c99..9ee82518 100644 --- a/src/math/nextafter.c +++ b/src/math/nextafter.c @@ -27,7 +27,7 @@ double nextafter(double x, double y) e = ux.bits >> 52 & 0x7ff; /* raise overflow if ux.value is infinite and x is finite */ if (e == 0x7ff) - return x + x; + FORCE_EVAL(x+x); /* raise underflow if ux.value is subnormal or zero */ if (e == 0) FORCE_EVAL(x*x + ux.value*ux.value); diff --git a/src/math/nextafterf.c b/src/math/nextafterf.c index b703487b..22b61dce 100644 --- a/src/math/nextafterf.c +++ b/src/math/nextafterf.c @@ -26,7 +26,7 @@ float nextafterf(float x, float y) e = ux.bits & 0x7f800000; /* raise overflow if ux.value is infinite and x is finite */ if (e == 0x7f800000) - return x + x; + FORCE_EVAL(x+x); /* raise underflow if ux.value is subnormal or zero */ if (e == 0) FORCE_EVAL(x*x + ux.value*ux.value); diff --git a/src/math/nexttoward.c b/src/math/nexttoward.c index 7355f2f1..6f32eca4 100644 --- a/src/math/nexttoward.c +++ b/src/math/nexttoward.c @@ -36,7 +36,7 @@ double nexttoward(double x, long double y) e = ux.bits>>52 & 0x7ff; /* raise overflow if ux.value is infinite and x is finite */ if (e == 0x7ff) - return x + x; + FORCE_EVAL(x+x); /* raise underflow if ux.value is subnormal or zero */ if (e == 0) FORCE_EVAL(x*x + ux.value*ux.value); diff --git a/src/math/nexttowardf.c b/src/math/nexttowardf.c index 8648be6a..9a693b1a 100644 --- a/src/math/nexttowardf.c +++ b/src/math/nexttowardf.c @@ -28,7 +28,7 @@ float nexttowardf(float x, long double y) e = ux.bits & 0x7f800000; /* raise overflow if ux.value is infinite and x is finite */ if (e == 0x7f800000) - return x + x; + FORCE_EVAL(x+x); /* raise underflow if ux.value is subnormal or zero */ if (e == 0) FORCE_EVAL(x*x + ux.value*ux.value); |