diff options
-rw-r--r-- | manifest | 12 | ||||
-rw-r--r-- | manifest.uuid | 2 | ||||
-rw-r--r-- | src/util.c | 26 |
3 files changed, 26 insertions, 14 deletions
@@ -1,5 +1,5 @@ -C Changes\sto\sinternal\sAtoF\sto\simprove\s"accuracy"\swhen\smeasured\sagainst\sbuilt-in\sGCC\satof(). -D 2009-09-07T02:46:32 +C Attempt\sto\shandle\snumbers\sat\sthe\slimits\sof\sthe\sIEEE\s754\srange\sbetter\s(nan.test\snow\spasses). +D 2009-09-07T03:48:53 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 73ddeec9dd10b85876c5c2ce1fdce627e1dcc7f8 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -203,7 +203,7 @@ F src/tokenize.c af8a56e6a50c5042fc305bfa796275e9bf26ff2b F src/trigger.c 8158237fc5fa4b51a126a294791729c64d27a0a9 F src/update.c 12ffd68c2f241c730d5e051eb29b23e90682ff8a F src/utf.c 3ca2c9461b8e942c68da28bfccd448663f536a6f -F src/util.c 7404ac078125aafc0e274b2d1a918c3f15b50294 +F src/util.c 59d4e9456bf1fe581f415a783fa0cee6115c8f35 F src/vacuum.c 3fe0eebea6d2311c1c2ab2962887d11f7a4dcfb0 F src/vdbe.c addf5f6fefe9b9c6ca8819efbf52cfce8bd68089 F src/vdbe.h 080fe6bc1264438becb8bf9b9f3c84074c336b78 @@ -750,7 +750,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 2aeab80e5b84f5e94c5c99b4adeca805601c844b -R 0b92cbb9074dfe690c0e4c14e6998bde +P 438e1577d0f9ceb2851ee0df0df18f0229eca491 +R c2daf7f44258efdd4b9472e2943bb165 U shane -Z 82d0c356acbda85944f3ae28efe12d94 +Z 2480ce6a3608c9caf8089d33acaa4dae diff --git a/manifest.uuid b/manifest.uuid index fb0b52015..9dcb56fba 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -438e1577d0f9ceb2851ee0df0df18f0229eca491
\ No newline at end of file +2a74ae1969aeec93576a44e11177677e6f3cea9c
\ No newline at end of file diff --git a/src/util.c b/src/util.c index 085d7140e..d12bcd536 100644 --- a/src/util.c +++ b/src/util.c @@ -375,14 +375,26 @@ int sqlite3AtoF(const char *z, double *pResult){ ** and store in result. */
if( e ){
double scale = 1.0;
- /* 1.0e+22 is the largest power of 10 than can be
- ** represented exactly. */
- while( e%22 ) { scale *= 1.0e+1; e -= 1; }
- while( e>0 ) { scale *= 1.0e+22; e -= 22; }
- if( esign<0 ){
- result = s / scale;
+ /* attempt to handle extremely small/large numbers better */
+ if( e>307 && e<342 ){
+ while( e%308 ) { scale *= 1.0e+1; e -= 1; }
+ if( esign<0 ){
+ result = s / scale;
+ result /= 1.0e+308;
+ }else{
+ result = s * scale;
+ result *= 1.0e+308;
+ }
}else{
- result = s * scale;
+ /* 1.0e+22 is the largest power of 10 than can be
+ ** represented exactly. */
+ while( e%22 ) { scale *= 1.0e+1; e -= 1; }
+ while( e>0 ) { scale *= 1.0e+22; e -= 22; }
+ if( esign<0 ){
+ result = s / scale;
+ }else{
+ result = s * scale;
+ }
}
} else {
result = (double)s;
|