mirror of git://git.musl-libc.org/musl
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)
This commit is contained in:
parent
cfbaba79a2
commit
662ed20065
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue