aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--manifest12
-rw-r--r--manifest.uuid2
-rw-r--r--src/util.c26
3 files changed, 26 insertions, 14 deletions
diff --git a/manifest b/manifest
index d97af3eed..aa0928931 100644
--- a/manifest
+++ b/manifest
@@ -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;