summaryrefslogtreecommitdiff
path: root/src/stdio
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2014-05-30 17:09:53 +0200
committerRich Felker <dalias@aerifal.cx>2014-05-30 13:06:51 -0400
commitbff6095d915f3e41206e47ea2a570ecb937ef926 (patch)
tree87fe4f5a4541909018baa9e9495ab8b6b29354be /src/stdio
parentc3504686580bd93c3937e3b6d6cfa223c4cd7b74 (diff)
downloadmusl-bff6095d915f3e41206e47ea2a570ecb937ef926.tar.gz
musl-bff6095d915f3e41206e47ea2a570ecb937ef926.tar.bz2
musl-bff6095d915f3e41206e47ea2a570ecb937ef926.tar.xz
musl-bff6095d915f3e41206e47ea2a570ecb937ef926.zip
use cleaner code for handling float rounding in vfprintf
CONCAT(0x1p,LDBL_MANT_DIG) is not safe outside of libc, use 2/LDBL_EPSILON instead. fix was proposed by Morten Welinder.
Diffstat (limited to 'src/stdio')
-rw-r--r--src/stdio/vfprintf.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/src/stdio/vfprintf.c b/src/stdio/vfprintf.c
index f6e7f38d..ea257720 100644
--- a/src/stdio/vfprintf.c
+++ b/src/stdio/vfprintf.c
@@ -13,8 +13,6 @@
#define MAX(a,b) ((a)>(b) ? (a) : (b))
#define MIN(a,b) ((a)<(b) ? (a) : (b))
-#define CONCAT2(x,y) x ## y
-#define CONCAT(x,y) CONCAT2(x,y)
/* Convenient bit representation for modifier flags, which all fall
* within 31 codepoints of the space character. */
@@ -343,7 +341,7 @@ static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t)
x = *d % i;
/* Are there any significant digits past j? */
if (x || d+1!=z) {
- long double round = CONCAT(0x1p,LDBL_MANT_DIG);
+ long double round = 2/LDBL_EPSILON;
long double small;
if (*d/i & 1) round += 2;
if (x<i/2) small=0x0.8p0;