From: Paul Eggert Date: Mon, 21 Aug 2023 00:55:03 +0000 (-0700) Subject: ldexp: port to non-two’s complement X-Git-Tag: v1.0~876 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=3703c742aa9b90d57bc7427b94cec21a6492d106;p=gnulib.git ldexp: port to non-two’s complement * lib/ldexp.c (FUNC): Don’t assume two’s-complement. --- diff --git a/ChangeLog b/ChangeLog index 6575ee12b6..8f346acff5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2023-08-20 Paul Eggert + + ldexp: port to non-two’s complement + * lib/ldexp.c (FUNC): Don’t assume two’s-complement. + 2023-08-20 Bruno Haible readutmp, boot-time: Fix the result on runit and s6 init systems. diff --git a/lib/ldexp.c b/lib/ldexp.c index 844fd11f53..8bc4073527 100644 --- a/lib/ldexp.c +++ b/lib/ldexp.c @@ -57,16 +57,15 @@ FUNC (DOUBLE x, int exp) BEGIN_ROUNDING (); /* Check for zero, nan and infinity. */ - if (!(ISNAN (x) || x + x == x || exp == 0)) + if (!(ISNAN (x) || x + x == x)) { - bool negexp = exp < 0; - DOUBLE factor = negexp ? L_(0.5) : L_(2.0); + DOUBLE factor = exp < 0 ? L_(0.5) : L_(2.0); while (true) { - if (exp & 1) + if (exp % 2 != 0) x *= factor; - exp = (exp + negexp) >> 1; + exp /= 2; if (exp == 0) break; factor = factor * factor;