X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=src%2Finternal%2Ffloatscan.c;h=28a09c252837033fe78ffa90ecdcd55a2450d04f;hp=3875719b42e064bd5b15e104a9ddb8b4abee8cf5;hb=470fecdd3aa90a1787a4f678a8cb76d3641fa9a9;hpb=c5ff29699cb3cccf8dcd8e44ddf4dcb7599e585c diff --git a/src/internal/floatscan.c b/src/internal/floatscan.c index 3875719b..28a09c25 100644 --- a/src/internal/floatscan.c +++ b/src/internal/floatscan.c @@ -44,7 +44,7 @@ static long long scanexp(FILE *f, int pok) } for (x=0; c-'0'<10U && x=0 ? rp%9 : rp%9+9; + int p10 = p10s[rpm9-1]; + uint32_t carry = 0; + for (k=a; k!=z; k++) { + uint32_t tmp = x[k] % p10; + x[k] = x[k]/p10 + carry; + carry = 1000000000/p10 * tmp; + if (k==a && !x[k]) { + a = (a+1 & MASK); + rp -= 9; + } + } + if (carry) x[z++] = carry; + rp += 9-rpm9; + } + + while (rp < 9*LD_B1B_DIG || (rp == 9*LD_B1B_DIG && x[a]>sh) * tmp; if (k==a && !x[k]) { a = (a+1 & MASK); + i--; rp -= 9; } } @@ -225,8 +218,10 @@ static long double decfloat(FILE *f, int bits, int emin, int sign, int pok) } } - for (y=i=0; i