From: Wilco Dijkstra Date: Thu, 30 Oct 2025 15:24:53 +0000 (+0000) Subject: math: Fix pow special case [BZ #33563] X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0212fc23b0eeb9d32c9d70d37d36a77cb1185abc;p=thirdparty%2Fglibc.git math: Fix pow special case [BZ #33563] Fix pow (DBL_MAX, 1.0) to return DBL_MAX when rouding upwards without FMA. This fixes BZ #33563. Reviewed-by: Adhemerval Zanella --- diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c index 3d6933137c..3dc171885a 100644 --- a/sysdeps/ieee754/dbl-64/e_pow.c +++ b/sysdeps/ieee754/dbl-64/e_pow.c @@ -147,8 +147,14 @@ specialcase (double_t tmp, uint64_t sbits, uint64_t ki) /* k > 0, the exponent of scale might have overflowed by <= 460. */ sbits -= 1009ull << 52; scale = asdouble (sbits); - y = 0x1p1009 * (scale + scale * tmp); - return check_oflow (y); + y = scale + scale * tmp; +#ifndef __FP_FAST_FMA + /* Special case pow (0x1.fffffffffffffp+1023, 1.0) when rounding up. */ + if (WANT_ROUNDING && y == 0x1p15 + && (math_opt_barrier (1.0) + 0x1p-60) != 1.0) + return DBL_MAX; +#endif + return check_oflow (y * 0x1p1009); } /* k < 0, need special care in the subnormal range. */ sbits += 1022ull << 52;