mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-10 05:03:06 +03:00
alpha: fix rint on sNaN input
The alpha version of rint wrongly return sNaN for sNaN input. Fix that by checking for NaN and by returning the input value added with itself in that case. Changelog: * sysdeps/alpha/fpu/s_rint.c (__rint): Add argument with itself when it is a NaN. * sysdeps/alpha/fpu/s_rintf.c (__rintf): Likewise.
This commit is contained in:
@@ -8,6 +8,9 @@
|
|||||||
when it is a NaN.
|
when it is a NaN.
|
||||||
[_IEEE_FP_INEXACT] Remove.
|
[_IEEE_FP_INEXACT] Remove.
|
||||||
* sysdeps/alpha/fpu/s_floorf.c (__floorf): Likewise.
|
* sysdeps/alpha/fpu/s_floorf.c (__floorf): Likewise.
|
||||||
|
* sysdeps/alpha/fpu/s_rint.c (__rint): Add argument with itself
|
||||||
|
when it is a NaN.
|
||||||
|
* sysdeps/alpha/fpu/s_rintf.c (__rintf): Likewise.
|
||||||
|
|
||||||
2016-08-01 Carlos O'Donell <carlos@redhat.com>
|
2016-08-01 Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
@@ -23,6 +23,9 @@
|
|||||||
double
|
double
|
||||||
__rint (double x)
|
__rint (double x)
|
||||||
{
|
{
|
||||||
|
if (isnan (x))
|
||||||
|
return x + x;
|
||||||
|
|
||||||
if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */
|
if (isless (fabs (x), 9007199254740992.0)) /* 1 << DBL_MANT_DIG */
|
||||||
{
|
{
|
||||||
double tmp1, new_x;
|
double tmp1, new_x;
|
||||||
|
@@ -22,6 +22,9 @@
|
|||||||
float
|
float
|
||||||
__rintf (float x)
|
__rintf (float x)
|
||||||
{
|
{
|
||||||
|
if (isnanf (x))
|
||||||
|
return x + x;
|
||||||
|
|
||||||
if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */
|
if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */
|
||||||
{
|
{
|
||||||
/* Note that Alpha S_Floating is stored in registers in a
|
/* Note that Alpha S_Floating is stored in registers in a
|
||||||
|
Reference in New Issue
Block a user