* [PATCH] math: Fix exp10 undefined left shift
@ 2024-05-31 9:25 Szabolcs Nagy
2024-06-04 14:28 ` Adhemerval Zanella Netto
0 siblings, 1 reply; 2+ messages in thread
From: Szabolcs Nagy @ 2024-05-31 9:25 UTC (permalink / raw)
To: libc-alpha
Left shift of ki is undefined when ki<0, copy the logic from exp,
which uses unsigned arithmetics, to fix it.
---
sysdeps/ieee754/dbl-64/e_exp10.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c
index 225fc74c4c..7ea8270063 100644
--- a/sysdeps/ieee754/dbl-64/e_exp10.c
+++ b/sysdeps/ieee754/dbl-64/e_exp10.c
@@ -38,7 +38,7 @@ special_case (uint64_t sbits, double_t tmp, uint64_t ki)
{
double_t scale, y;
- if (ki - (1ull << 16) < 0x80000000)
+ if ((ki & 0x80000000) == 0)
{
/* The exponent of scale might have overflowed by 1. */
sbits -= 1ull << 52;
@@ -100,14 +100,14 @@ __exp10 (double x)
/* Reduce x: z = x * N / log10(2), k = round(z). */
double_t z = __exp_data.invlog10_2N * x;
double_t kd;
- int64_t ki;
+ uint64_t ki;
#if TOINT_INTRINSICS
kd = roundtoint (z);
ki = converttoint (z);
#else
kd = math_narrow_eval (z + Shift);
+ ki = asuint64 (kd);
kd -= Shift;
- ki = kd;
#endif
/* r = x - k * log10(2), r in [-0.5, 0.5]. */
--
2.25.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] math: Fix exp10 undefined left shift
2024-05-31 9:25 [PATCH] math: Fix exp10 undefined left shift Szabolcs Nagy
@ 2024-06-04 14:28 ` Adhemerval Zanella Netto
0 siblings, 0 replies; 2+ messages in thread
From: Adhemerval Zanella Netto @ 2024-06-04 14:28 UTC (permalink / raw)
To: Szabolcs Nagy, libc-alpha
On 31/05/24 06:25, Szabolcs Nagy wrote:
> Left shift of ki is undefined when ki<0, copy the logic from exp,
> which uses unsigned arithmetics, to fix it.
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> sysdeps/ieee754/dbl-64/e_exp10.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c
> index 225fc74c4c..7ea8270063 100644
> --- a/sysdeps/ieee754/dbl-64/e_exp10.c
> +++ b/sysdeps/ieee754/dbl-64/e_exp10.c
> @@ -38,7 +38,7 @@ special_case (uint64_t sbits, double_t tmp, uint64_t ki)
> {
> double_t scale, y;
>
> - if (ki - (1ull << 16) < 0x80000000)
> + if ((ki & 0x80000000) == 0)
> {
> /* The exponent of scale might have overflowed by 1. */
> sbits -= 1ull << 52;
> @@ -100,14 +100,14 @@ __exp10 (double x)
> /* Reduce x: z = x * N / log10(2), k = round(z). */
> double_t z = __exp_data.invlog10_2N * x;
> double_t kd;
> - int64_t ki;
> + uint64_t ki;
> #if TOINT_INTRINSICS
> kd = roundtoint (z);
> ki = converttoint (z);
> #else
> kd = math_narrow_eval (z + Shift);
> + ki = asuint64 (kd);
> kd -= Shift;
> - ki = kd;
> #endif
>
> /* r = x - k * log10(2), r in [-0.5, 0.5]. */
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-06-04 14:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-31 9:25 [PATCH] math: Fix exp10 undefined left shift Szabolcs Nagy
2024-06-04 14:28 ` Adhemerval Zanella Netto
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).