提交 be81f510 编写于 作者: S Szabolcs Nagy

math: raise invalid flag in ilogb*.c on +-0, +-inf and nan

上级 6f64505d
...@@ -8,13 +8,17 @@ int ilogb(double x) ...@@ -8,13 +8,17 @@ int ilogb(double x)
if (!e) { if (!e) {
u.bits <<= 12; u.bits <<= 12;
if (u.bits == 0) if (u.bits == 0) {
FORCE_EVAL(0/0.0f);
return FP_ILOGB0; return FP_ILOGB0;
}
/* subnormal x */ /* subnormal x */
for (e = -0x3ff; u.bits < (uint64_t)1<<63; e--, u.bits<<=1); for (e = -0x3ff; u.bits < (uint64_t)1<<63; e--, u.bits<<=1);
return e; return e;
} }
if (e == 0x7ff) if (e == 0x7ff) {
FORCE_EVAL(0/0.0f);
return u.bits<<12 ? FP_ILOGBNAN : INT_MAX; return u.bits<<12 ? FP_ILOGBNAN : INT_MAX;
}
return e - 0x3ff; return e - 0x3ff;
} }
...@@ -8,13 +8,17 @@ int ilogbf(float x) ...@@ -8,13 +8,17 @@ int ilogbf(float x)
if (!e) { if (!e) {
u.bits <<= 9; u.bits <<= 9;
if (u.bits == 0) if (u.bits == 0) {
FORCE_EVAL(0/0.0f);
return FP_ILOGB0; return FP_ILOGB0;
}
/* subnormal x */ /* subnormal x */
for (e = -0x7f; u.bits < (uint32_t)1<<31; e--, u.bits<<=1); for (e = -0x7f; u.bits < (uint32_t)1<<31; e--, u.bits<<=1);
return e; return e;
} }
if (e == 0xff) if (e == 0xff) {
FORCE_EVAL(0/0.0f);
return u.bits<<9 ? FP_ILOGBNAN : INT_MAX; return u.bits<<9 ? FP_ILOGBNAN : INT_MAX;
}
return e - 0x7f; return e - 0x7f;
} }
...@@ -14,15 +14,19 @@ int ilogbl(long double x) ...@@ -14,15 +14,19 @@ int ilogbl(long double x)
int e = u.bits.exp; int e = u.bits.exp;
if (!e) { if (!e) {
if (m == 0) if (m == 0) {
FORCE_EVAL(0/0.0f);
return FP_ILOGB0; return FP_ILOGB0;
}
/* subnormal x */ /* subnormal x */
for (e = -0x3fff+1; m < (uint64_t)1<<63; e--, m<<=1); for (e = -0x3fff+1; m < (uint64_t)1<<63; e--, m<<=1);
return e; return e;
} }
if (e == 0x7fff) if (e == 0x7fff) {
FORCE_EVAL(0/0.0f);
/* in ld80 msb is set in inf */ /* in ld80 msb is set in inf */
return m & (uint64_t)-1>>1 ? FP_ILOGBNAN : INT_MAX; return m & (uint64_t)-1>>1 ? FP_ILOGBNAN : INT_MAX;
}
return e - 0x3fff; return e - 0x3fff;
} }
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册