glibc/sysdeps/ieee754
Szabolcs Nagy 505b5b2922 Fix powf overflow handling in non-nearest rounding mode [BZ #23961]
The threshold value at which powf overflows depends on the rounding mode
and the current check did not take this into account. So when the result
was rounded away from zero it could become infinity without setting
errno to ERANGE.

Example: pow(0x1.7ac7cp+5, 23) is 0x1.fffffep+127 + 0.1633ulp

If the result goes above 0x1.fffffep+127 + 0.5ulp then errno is set,
which is fine in nearest rounding mode, but

  powf(0x1.7ac7cp+5, 23) is inf in upward rounding mode
  powf(-0x1.7ac7cp+5, 23) is -inf in downward rounding mode

and the previous implementation did not set errno in these cases.

The fix tries to avoid affecting the common code path or calling a
function that may introduce a stack frame, so float arithmetics is used
to check the rounding mode and the threshold is selected accordingly.

	[BZ #23961]
	* math/auto-libm-test-in: Add new test case.
	* math/auto-libm-test-out-pow: Regenerated.
	* sysdeps/ieee754/flt-32/e_powf.c (__powf): Fix overflow check.
2018-12-11 10:01:43 +00:00
..
dbl-64 Remove the error handling wrapper from pow 2018-11-21 09:58:36 +00:00
float128 Use copysign functions not __copysign functions in glibc libm. 2018-09-27 20:04:48 +00:00
flt-32 Fix powf overflow handling in non-nearest rounding mode [BZ #23961] 2018-12-11 10:01:43 +00:00
ldbl-64-128 Remove unnecessary math_private.h includes. 2018-09-28 21:53:33 +00:00
ldbl-96 Remove unnecessary math_private.h includes. 2018-09-28 21:53:33 +00:00
ldbl-128 Use copysign functions not __copysign functions in glibc libm. 2018-09-27 20:04:48 +00:00
ldbl-128ibm Remove unnecessary math_private.h includes. 2018-09-28 21:53:33 +00:00
ldbl-128ibm-compat ldbl-128ibm-compat: Add printf_size 2018-07-02 10:51:01 -03:00
ldbl-opt Use PRINTF_LDBL_IS_DBL instead of __ldbl_is_dbl. 2018-12-05 18:15:43 -02:00
soft-fp sysdeps/ieee754/soft-fp: ignore maybe-uninitialized with -O [BZ #19444] 2018-10-02 15:40:57 +00:00
ieee754.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
k_standard.c Use copysign functions not __copysign functions in glibc libm. 2018-09-27 20:04:48 +00:00
k_standardf.c Remove unnecessary math_private.h includes. 2018-09-28 21:53:33 +00:00
k_standardl.c Remove unnecessary math_private.h includes. 2018-09-28 21:53:33 +00:00
Makefile
s_lib_version.c
s_matherr.c
s_signgam.c Remove unnecessary math_private.h includes. 2018-09-28 21:53:33 +00:00