]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
alpha: fix rint on sNaN input
authorAurelien Jarno <aurelien@aurel32.net>
Tue, 2 Aug 2016 07:18:59 +0000 (09:18 +0200)
committerMike Frysinger <vapier@gentoo.org>
Thu, 8 Dec 2016 05:38:29 +0000 (00:38 -0500)
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.

(cherry picked from commit cb7f9d63b921ea1a1cbb4ab377a8484fd5da9a2b)
(cherry picked from commit 51a313c50445eded2cfbbb60da2bbb98f3e9b219)

sysdeps/alpha/fpu/s_rint.c
sysdeps/alpha/fpu/s_rintf.c

index f33fe72c116be997625006bd719cd11c9098f75e..259348afc08dd18880c9a44c4c054bb814ec7ba3 100644 (file)
@@ -23,6 +23,9 @@
 double
 __rint (double x)
 {
+  if (isnan (x))
+    return x + x;
+
   if (isless (fabs (x), 9007199254740992.0))   /* 1 << DBL_MANT_DIG */
     {
       double tmp1, new_x;
index 1400dfe8d76b3bff112a8c58d2876a43598a3923..645728ad5b02e1c9b9c47a8cb3806471e9362ba7 100644 (file)
@@ -22,6 +22,9 @@
 float
 __rintf (float x)
 {
+  if (isnanf (x))
+    return x + x;
+
   if (isless (fabsf (x), 16777216.0f)) /* 1 << FLT_MANT_DIG */
     {
       /* Note that Alpha S_Floating is stored in registers in a