diff options
author | drh <drh@noemail.net> | 2012-06-19 03:35:05 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2012-06-19 03:35:05 +0000 |
commit | 4ef941302867706bd6e997b9b46d5e096d93273e (patch) | |
tree | 5e849c47c5427e8285d3241ad7f0651050d57204 /src/printf.c | |
parent | 72b3fbc7b5b5bbe783ca6a6b14532770f6eb011d (diff) | |
download | sqlite-4ef941302867706bd6e997b9b46d5e096d93273e.tar.gz sqlite-4ef941302867706bd6e997b9b46d5e096d93273e.zip |
Round-trip conversions of real->text->real are now lossless on x64 with GCC.
Untested on other platforms so far. Still a corner-case problem with round().
FossilOrigin-Name: fd7bd4a59361be41b10522abc212cf56fb5e35b4
Diffstat (limited to 'src/printf.c')
-rw-r--r-- | src/printf.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/printf.c b/src/printf.c index 75febb286..9f68d204f 100644 --- a/src/printf.c +++ b/src/printf.c @@ -430,6 +430,7 @@ void sqlite3VXPrintf( } if( realvalue>0.0 ){ LONGDOUBLE_TYPE scale = 1.0; + while( realvalue>=1e100*scale && exp<=350 ){ scale *= 1e100;exp+=100;} while( realvalue>=1e64*scale && exp<=350 ){ scale *= 1e64; exp+=64; } while( realvalue>=1e8*scale && exp<=350 ){ scale *= 1e8; exp+=8; } while( realvalue>=10.0*scale && exp<=350 ){ scale *= 10.0; exp++; } |