Print this page

        

@@ -39,10 +39,12 @@
  * See fmaxf.c for a discussion of implementation trade-offs.
  */
 
 #include "libm.h"       /* for islessequal macro */
 
+#include "fenv_inlines.h"
+#include <stdio.h>
 #include <sys/isa_defs.h>
 
 double
 __fmin(double x, double y) {
         union {

@@ -57,21 +59,16 @@
 
         /* if x is nan, replace it by y */
         if (x != x)
                 x = y;
 
-        /* if x is greater than y or x and y are unordered, replace x by y */
-#if defined(COMPARISON_MACRO_BUG)
-        if (x != x || x > y)
-#else
-        if (!islessequal(x, y))
-#endif
+        /* At this point, x and y are either both numeric, or both NaN */
+        if (!isnan(x) && !islessequal(x, y))
                 x = y;
 
         /*
-         * now x and y are either both NaN or both numeric; set the
-         * sign of the result if either x or y has its sign set
+         * set the sign of the result if either x or y has its sign set
          */
         xx.d = x;
         yy.d = y;
 #if defined(_BIG_ENDIAN)
         s = (xx.i[0] | yy.i[0]) & 0x80000000;