From: Rich Felker Date: Thu, 23 Aug 2018 19:24:03 +0000 (-0400) Subject: fix printf precision specifier for hex floats on non-ld80 archs X-Git-Tag: v1.1.20~25 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=cfa0a54c082d41db6446638eed1d57f163434092;p=oweals%2Fmusl.git fix printf precision specifier for hex floats on non-ld80 archs the code to perform rounding to the desired precision wrongly assumed the long double mantissa was an integral number of nibbles (hex digits) in length. this is true for 80-bit extended precision (64-bit mantissa) but not for double (53) or quad (113). scale the rounding value by 1<<(LDBL_MANT_DIG%4) to compensate. --- diff --git a/src/stdio/vfprintf.c b/src/stdio/vfprintf.c index 50fb55c1..5e7be717 100644 --- a/src/stdio/vfprintf.c +++ b/src/stdio/vfprintf.c @@ -220,6 +220,7 @@ static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t) else re=LDBL_MANT_DIG/4-1-p; if (re) { + round *= 1<<(LDBL_MANT_DIG%4); while (re--) round*=16; if (*prefix=='-') { y=-y;