浏览代码

floatscan: fix incorrect count of leading nonzero digits

this off-by-one error was causing values with just one digit past the
decimal point to be treated by the integer case. in many cases it
would yield the correct result, but if expressions are evaluated in
excess precision, double rounding may occur.
Rich Felker 13 年之前
父节点
当前提交
2ac580fdfe
共有 1 个文件被更改,包括 1 次插入1 次删除
  1. 1 1
      src/internal/floatscan.c

+ 1 - 1
src/internal/floatscan.c

@@ -81,8 +81,8 @@ static long double decfloat(FILE *f, int c, int bits, int emin, int sign, int po
 			if (lrp!=-1) break;
 			lrp = dc;
 		} else if (k < KMAX-2) {
-			if (c!='0') lnz = dc;
 			dc++;
+			if (c!='0') lnz = dc;
 			if (j) x[k] = x[k]*10 + c-'0';
 			else x[k] = c-'0';
 			if (++j==9) {