瀏覽代碼

support ld80 pseudo-denormal invalid bit patterns; treat them as nan

this is silly, but it makes apps that read binary junk and interpret
it as ld80 "safer", and it gets gnulib to stop replacing printf...
Rich Felker 12 年之前
父節點
當前提交
fad231b960
共有 1 個文件被更改,包括 5 次插入2 次删除
  1. 5 2
      src/math/__fpclassifyl.c

+ 5 - 2
src/math/__fpclassifyl.c

@@ -7,8 +7,11 @@ int __fpclassifyl(long double x)
 {
 	union ldshape u = { x };
 	int e = u.bits.exp;
-	if (!e)
-		return u.bits.m ? FP_SUBNORMAL : FP_ZERO;
+	if (!e) {
+		if (u.bits.m >> 63) return FP_NAN;
+		else if (u.bits.m) return FP_SUBNORMAL;
+		else return FP_ZERO;
+	}
 	if (e == 0x7fff)
 		return u.bits.m & (uint64_t)-1>>1 ? FP_NAN : FP_INFINITE;
 	return u.bits.m & (uint64_t)1<<63 ? FP_NORMAL : FP_NAN;