diff options
author | das <das@FreeBSD.org> | 2008-09-03 07:32:06 +0000 |
---|---|---|
committer | das <das@FreeBSD.org> | 2008-09-03 07:32:06 +0000 |
commit | 65b5df780e46482cb390f068a30dd18da539fa2e (patch) | |
tree | 33641ebe9c53fac1ea3bbd0e3153ae9d1e0900c6 | |
parent | 2732388653bc1d73e3e22df8de7d745845b3f37f (diff) | |
download | FreeBSD-src-65b5df780e46482cb390f068a30dd18da539fa2e.zip FreeBSD-src-65b5df780e46482cb390f068a30dd18da539fa2e.tar.gz |
Make strtof() respect the current rounding mode.
-rw-r--r-- | contrib/gdtoa/strtof.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/contrib/gdtoa/strtof.c b/contrib/gdtoa/strtof.c index 58486f2..727a3fa 100644 --- a/contrib/gdtoa/strtof.c +++ b/contrib/gdtoa/strtof.c @@ -40,13 +40,21 @@ strtof(s, sp) CONST char *s; char **sp; strtof(CONST char *s, char **sp) #endif { - static FPI fpi = { 24, 1-127-24+1, 254-127-24+1, 1, SI }; + static FPI fpi0 = { 24, 1-127-24+1, 254-127-24+1, 1, SI }; + FPI *fpi, fpi1; ULong bits[1]; Long exp; int k; + int Rounding = Flt_Rounds; union { ULong L[1]; float f; } u; - k = strtodg(s, sp, &fpi, &exp, bits); + fpi = &fpi0; + if (Rounding != FPI_Round_near) { + fpi1 = fpi0; + fpi1.rounding = Rounding; + fpi = &fpi1; + } + k = strtodg(s, sp, fpi, &exp, bits); switch(k & STRTOG_Retmask) { case STRTOG_NoNumber: case STRTOG_Zero: |