mirror of git://sourceware.org/git/glibc.git
As with various other issues of this kind, bug 16977 is log10 (1) wrongly returning -0 rather than +0 in round-downward mode because of an implementation effectively in terms of log1p (x - 1). This patch fixes the issue in the same way used for log. Tested x86_64 and x86 and ulps updated accordingly. Also tested for mips64 to confirm a fix was needed for ldbl-128 and to validate that fix (also applied to ldbl-128ibm since that version of logl is essentially the same as the ldbl-128 one). [BZ #16977] * sysdeps/i386/fpu/e_log10.S (__ieee754_log10): Take absolute value when x - 1 is zero. * sysdeps/i386/fpu/e_log10f.S (__ieee754_log10f): Likewise. * sysdeps/i386/fpu/e_log10l.S (__ieee754_log10l): Likewise. * sysdeps/ieee754/ldbl-128/e_log10l.c (__ieee754_log10l): Return 0.0L for an argument of 1.0L. * sysdeps/ieee754/ldbl-128ibm/e_log10l.c (__ieee754_log10l): Likewise. * sysdeps/x86_64/fpu/e_log10l.S (__ieee754_log10l): Take absolute value when x - 1 is zero. * math/libm-test.inc (log10_test): Use ALL_RM_TEST. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. |
||
|---|---|---|
| .. | ||
| multiarch | ||
| Implies | ||
| dla.h | ||
| e_acosl.c | ||
| e_atan2l.c | ||
| e_exp2l.S | ||
| e_exp10l.S | ||
| e_expf.S | ||
| e_expl.S | ||
| e_fmodl.S | ||
| e_ilogbl.S | ||
| e_log2l.S | ||
| e_log10l.S | ||
| e_logl.S | ||
| e_powl.S | ||
| e_remainderl.S | ||
| e_scalbl.S | ||
| e_sqrt.c | ||
| e_sqrtf.c | ||
| e_sqrtl.c | ||
| fclrexcpt.c | ||
| fedisblxcpt.c | ||
| feenablxcpt.c | ||
| fegetenv.c | ||
| fegetexcept.c | ||
| fegetround.c | ||
| feholdexcpt.c | ||
| fesetenv.c | ||
| fesetround.c | ||
| feupdateenv.c | ||
| fgetexcptflg.c | ||
| fraiseexcpt.c | ||
| fsetexcptflg.c | ||
| ftestexcept.c | ||
| k_rem_pio2l.c | ||
| libm-test-ulps | ||
| math_ldbl.h | ||
| math_private.h | ||
| printf_fphex.c | ||
| s_atanl.c | ||
| s_ceill.S | ||
| s_copysign.S | ||
| s_copysignf.S | ||
| s_copysignl.S | ||
| s_cosf.S | ||
| s_expm1l.S | ||
| s_fabs.c | ||
| s_fabsf.c | ||
| s_fabsl.S | ||
| s_fdiml.S | ||
| s_finitel.S | ||
| s_floorl.S | ||
| s_fmax.S | ||
| s_fmaxf.S | ||
| s_fmaxl.S | ||
| s_fmin.S | ||
| s_fminf.S | ||
| s_fminl.S | ||
| s_fpclassifyl.c | ||
| s_isinfl.c | ||
| s_isnanl.c | ||
| s_llrint.S | ||
| s_llrintf.S | ||
| s_llrintl.S | ||
| s_log1pl.S | ||
| s_logbl.c | ||
| s_lrint.S | ||
| s_lrintf.S | ||
| s_lrintl.S | ||
| s_nearbyintl.S | ||
| s_nextafterl.c | ||
| s_nexttoward.c | ||
| s_nexttowardf.c | ||
| s_rintl.c | ||
| s_scalbnl.S | ||
| s_signbit.S | ||
| s_signbitf.S | ||
| s_significandl.c | ||
| s_sincosf.S | ||
| s_sinf.S | ||
| s_truncl.S | ||