Return INT_MAX for +-Inf.
authordrepper <drepper>
Wed, 6 Jun 2001 12:49:36 +0000 (12:49 +0000)
committerdrepper <drepper>
Wed, 6 Jun 2001 12:49:36 +0000 (12:49 +0000)
sysdeps/ieee754/dbl-64/s_ilogb.c
sysdeps/ieee754/flt-32/s_ilogbf.c
sysdeps/ieee754/ldbl-128/s_ilogbl.c
sysdeps/ieee754/ldbl-96/s_ilogbl.c

index 820f01c..89a8337 100644 (file)
@@ -16,10 +16,12 @@ static char rcsid[] = "$NetBSD: s_ilogb.c,v 1.9 1995/05/10 20:47:28 jtc Exp $";
 
 /* ilogb(double x)
  * return the binary exponent of non-zero x
- * ilogb(0) = 0x80000001
- * ilogb(inf/NaN) = 0x7fffffff (no signal is raised)
+ * ilogb(0) = FP_ILOGB0
+ * ilogb(NaN) = FP_ILOGBNAN (no signal is raised)
+ * ilogb(+-Inf) = INT_MAX (no signal is raised)
  */
 
+#include <limits.h>
 #include "math.h"
 #include "math_private.h"
 
@@ -47,7 +49,13 @@ static char rcsid[] = "$NetBSD: s_ilogb.c,v 1.9 1995/05/10 20:47:28 jtc Exp $";
            return ix;
        }
        else if (hx<0x7ff00000) return (hx>>20)-1023;
-       else return FP_ILOGBNAN;
+       else if (FP_ILOGBNAN != INT_MAX) {
+           /* ISO C99 requires ilogb(+-Inf) == INT_MAX.  */
+           GET_LOW_WORD(lx,x);
+           if(((hx^0x7ff00000)|lx) == 0)
+               return INT_MAX;
+       }
+       return FP_ILOGBNAN;
 }
 weak_alias (__ilogb, ilogb)
 #ifdef NO_LONG_DOUBLE
index e652b93..ea3dc13 100644 (file)
@@ -17,6 +17,7 @@
 static char rcsid[] = "$NetBSD: s_ilogbf.c,v 1.4 1995/05/10 20:47:31 jtc Exp $";
 #endif
 
+#include <limits.h>
 #include "math.h"
 #include "math_private.h"
 
@@ -39,6 +40,11 @@ static char rcsid[] = "$NetBSD: s_ilogbf.c,v 1.4 1995/05/10 20:47:31 jtc Exp $";
            return ix;
        }
        else if (hx<0x7f800000) return (hx>>23)-127;
-       else return FP_ILOGBNAN;
+       else if (FP_ILOGBNAN != INT_MAX) {
+           /* ISO C99 requires ilogbf(+-Inf) == INT_MAX.  */
+           if (hx==0x7f800000)
+               return INT_MAX;
+       }
+       return FP_ILOGBNAN;
 }
 weak_alias (__ilogbf, ilogbf)
index d2acfd3..c042aa4 100644 (file)
@@ -19,8 +19,9 @@ static char rcsid[] = "$NetBSD: $";
 
 /* ilogbl(long double x)
  * return the binary exponent of non-zero x
- * ilogbl(0) = 0x80000001
- * ilogbl(inf/NaN) = 0x7fffffff (no signal is raised)
+ * ilogbl(0) = FP_ILOGB0
+ * ilogbl(NaN) = FP_ILOGBNAN (no signal is raised)
+ * ilogbl(+-Inf) = INT_MAX (no signal is raised)
  */
 
 #include "math.h"
@@ -50,6 +51,11 @@ static char rcsid[] = "$NetBSD: $";
            return ix;
        }
        else if (hx<0x7fff000000000000LL) return (hx>>48)-0x3fff;
-       else return FP_ILOGBNAN;
+       else if (FP_ILOGBNAN != INT_MAX) {
+           /* ISO C99 requires ilogbl(+-Inf) == INT_MAX.  */
+           if (((hx^0x7fff000000000000LL)|lx) == 0)
+               return INT_MAX;
+       }
+       return FP_ILOGBNAN;
 }
 weak_alias (__ilogbl, ilogbl)
index d44229d..9688f5a 100644 (file)
@@ -20,10 +20,12 @@ static char rcsid[] = "$NetBSD: $";
 
 /* ilogbl(long double x)
  * return the binary exponent of non-zero x
- * ilogbl(0) = 0x80000001
- * ilogbl(inf/NaN) = 0x7fffffff (no signal is raised)
+ * ilogbl(0) = FP_ILOGB0
+ * ilogbl(NaN) = FP_ILOGBNAN (no signal is raised)
+ * ilogbl(+-Inf) = INT_MAX (no signal is raised)
  */
 
+#include <limits.h>
 #include "math.h"
 #include "math_private.h"
 
@@ -51,6 +53,9 @@ static char rcsid[] = "$NetBSD: $";
            return ix;
        }
        else if (es<0x7fff) return es-0x3fff;
-       else return FP_ILOGBNAN;
+       else if (FP_ILOGBNAN != INT_MAX && (hx|lx) == 0)
+           /* ISO C99 requires ilogbl(+-Inf) == INT_MAX.  */
+           return INT_MAX;
+       return FP_ILOGBNAN;
 }
 weak_alias (__ilogbl, ilogbl)