[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