issue with ldexp/ldexpf

Paul Zimmermann Paul.Zimmermann@inria.fr
Mon Feb 3 15:39:45 GMT 2025


       Hi,

this issue, reported for 4.3.0, is still in 4.5.0:

https://sourceware.org/pipermail/newlib/2023/020225.html
https://sourceware.org/pipermail/newlib/2024/021013.html (ping ldexp)
https://sourceware.org/pipermail/newlib/2024/021014.html (ldexpf)

The same issue holds also for ldexpl:

#include <stdio.h>
#include <math.h>
#include <fenv.h>

int main()
{
  volatile long double x = 1.0, y;
  while (x * (long double) 0.5 != 0)
    x = x * 0.5;
  printf ("x=%La\n", x);
  fesetround (FE_TONEAREST);
  y = ldexpl (x, -1);
  printf ("FE_TONEAREST:  y=%La\n", y);
  fesetround (FE_TOWARDZERO);
  y = ldexpl (x, -1);
  printf ("FE_TOWARDZERO: y=%La\n", y);
  fesetround (FE_UPWARD);
  y = ldexpl (x, -1);
  printf ("FE_UPWARD:     y=%La\n", y);
  fesetround (FE_DOWNWARD);
  y = ldexpl (x, -1);
  printf ("FE_DOWNWARD:   y=%La\n", y);
}

$ gcc check_ldexpl.c -lm && ./a.out
x=0x0.000000000000001p-16385
FE_TONEAREST:  y=0x0p+0
FE_TOWARDZERO: y=0x0p+0
FE_UPWARD:     y=0x0.000000000000001p-16385
FE_DOWNWARD:   y=0x0p+0

With Newlib :

x=0x0.000000000000001p-16385
FE_TONEAREST:  y=0x0p+0
FE_TOWARDZERO: y=0x0p+0
FE_UPWARD:     y=0x0p+0
FE_DOWNWARD:   y=0x0p+0

Paul Zimmermann


More information about the Newlib mailing list