[PATCH] Fix rounding results in lrint() & llrint() when close to 0

Corinna Vinschen vinschen@redhat.com
Thu Jul 27 09:39:04 GMT 2023


On Jul 27 01:49, Jesse Huang via Newlib wrote:
> soft-fp should round floating pointer numbers according to the current
> rounding mode. However, in the current code of lrint() and llrint(),
> there are if statements before the actual rounding computation
> 
>       if(j0 < -1)
>         return 0;
> 
> Where j0 is the exponent of the floating point number.
> 
> It means any number having a exponent less than -1
> (i.e. interval (-0.5, 0.5)) will be rounded to 0 regardeless of the
> rounding mode.
> 
> The bug already fixed in glibc in 2006 by moving the check afterwards
> the rounding computation, but still persists in newlib.
> 
> This patch fixed it in a similar way to glibc
> Ref Commit in glibc: 6624dbc07b5a9fb316ed188ef01f65b8eea8b47c
> ---
>  newlib/libm/common/s_llrint.c  | 31 +++++++++++--------------------
>  newlib/libm/common/s_lrint.c   | 31 +++++++++++--------------------
>  newlib/libm/common/sf_llrint.c |  6 ++----
>  newlib/libm/common/sf_lrint.c  |  6 ++----
>  4 files changed, 26 insertions(+), 48 deletions(-)

Pushed.


Thanks,
Corinna



More information about the Newlib mailing list