mirror of
https://git.musl-libc.org/git/musl
synced 2025-01-24 23:22:04 +03:00
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.
This commit is contained in:
parent
c350468658
commit
bff6095d91
@ -13,8 +13,6 @@
|
|||||||
|
|
||||||
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
||||||
#define MIN(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
|
/* Convenient bit representation for modifier flags, which all fall
|
||||||
* within 31 codepoints of the space character. */
|
* 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;
|
x = *d % i;
|
||||||
/* Are there any significant digits past j? */
|
/* Are there any significant digits past j? */
|
||||||
if (x || d+1!=z) {
|
if (x || d+1!=z) {
|
||||||
long double round = CONCAT(0x1p,LDBL_MANT_DIG);
|
long double round = 2/LDBL_EPSILON;
|
||||||
long double small;
|
long double small;
|
||||||
if (*d/i & 1) round += 2;
|
if (*d/i & 1) round += 2;
|
||||||
if (x<i/2) small=0x0.8p0;
|
if (x<i/2) small=0x0.8p0;
|
||||||
|
Loading…
Reference in New Issue
Block a user