diff options
author | Szabolcs Nagy <nsz@port70.net> | 2014-05-30 17:09:53 +0200 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2014-05-30 13:06:51 -0400 |
commit | bff6095d915f3e41206e47ea2a570ecb937ef926 (patch) | |
tree | 87fe4f5a4541909018baa9e9495ab8b6b29354be /src/stdio | |
parent | c3504686580bd93c3937e3b6d6cfa223c4cd7b74 (diff) | |
download | musl-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.c | 4 |
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; |