Преглед на файлове

fix float formatting of some exact halfway cases

in nearest rounding mode exact halfway cases were not following the
round to even rule if the rounding happened at a base 1000000000 digit
boundary of the internal representation and the previous digit was odd.

e.g. printf("%.0f", 1.5) printed 1 instead of 2.
Szabolcs Nagy преди 8 години
родител
ревизия
51ab6db4ed
променени са 1 файла, в които са добавени 2 реда и са изтрити 1 реда
  1. 2 1
      src/stdio/vfprintf.c

+ 2 - 1
src/stdio/vfprintf.c

@@ -345,7 +345,8 @@ static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t)
 		if (x || d+1!=z) {
 			long double round = 2/LDBL_EPSILON;
 			long double small;
-			if (*d/i & 1) round += 2;
+			if ((*d/i & 1) || (i==1000000000 && d>a && (d[-1]&1)))
+				round += 2;
 			if (x<i/2) small=0x0.8p0;
 			else if (x==i/2 && d+1==z) small=0x1.0p0;
 			else small=0x1.8p0;