about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-04-16 01:53:52 -0400
committerRich Felker <dalias@aerifal.cx>2012-04-16 01:53:52 -0400
commit2ac580fdfe1daf9924f221dc98878ae480306bfa (patch)
tree78e6e97b1801310be2bb4ae7085f3808b6bff1c8
parent67b25fe0a8947de93e3eddd36dae24a9fec12ade (diff)
downloadmusl-2ac580fdfe1daf9924f221dc98878ae480306bfa.tar.gz
musl-2ac580fdfe1daf9924f221dc98878ae480306bfa.tar.xz
musl-2ac580fdfe1daf9924f221dc98878ae480306bfa.zip
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.
-rw-r--r--src/internal/floatscan.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/internal/floatscan.c b/src/internal/floatscan.c
index 10123bfa..377a008b 100644
--- a/src/internal/floatscan.c
+++ b/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) {