diff options
author | unknown <kaa@polly.local> | 2006-11-14 16:36:31 +0300 |
---|---|---|
committer | unknown <kaa@polly.local> | 2006-11-14 16:36:31 +0300 |
commit | cab0dc6544c2e2985bd9bd6c4d3bd07a946070ad (patch) | |
tree | 214fc790b755da813af7fa58ab26c2a04cdc6320 /strings | |
parent | e7cee5b5c45b95f6e80e148e93fa04d935a95874 (diff) | |
parent | 23493eb22294350b2b2fa023c11dd33a11aeb8a0 (diff) | |
download | mariadb-git-cab0dc6544c2e2985bd9bd6c4d3bd07a946070ad.tar.gz |
Merge polly.local:/tmp/maint/bug22129/my41-bug22129
into polly.local:/home/kaa/src/maint/mysql-4.1-maint
Diffstat (limited to 'strings')
-rw-r--r-- | strings/strtod.c | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/strings/strtod.c b/strings/strtod.c index f298e265d7f..79ba458c009 100644 --- a/strings/strtod.c +++ b/strings/strtod.c @@ -31,7 +31,6 @@ #define MAX_DBL_EXP 308 #define MAX_RESULT_FOR_MAX_EXP 1.7976931348623157 -#define MIN_RESULT_FOR_MIN_EXP 2.225073858507202 static double scaler10[] = { 1.0, 1e10, 1e20, 1e30, 1e40, 1e50, 1e60, 1e70, 1e80, 1e90 }; @@ -161,26 +160,15 @@ double my_strtod(const char *str, char **end_ptr, int *error) order= exp + (neg_exp ? -1 : 1) * (ndigits - 1); if (order < 0) order= -order; - if (order >= MAX_DBL_EXP && result) + if (order >= MAX_DBL_EXP && !neg_exp && result) { double c; /* Compute modulus of C (see comment above) */ c= result / scaler * 10.0; - if (neg_exp) + if (order > MAX_DBL_EXP || c > MAX_RESULT_FOR_MAX_EXP) { - if (order > MAX_DBL_EXP || c < MIN_RESULT_FOR_MIN_EXP) - { - result= 0.0; - goto done; - } - } - else - { - if (order > MAX_DBL_EXP || c > MAX_RESULT_FOR_MAX_EXP) - { - overflow= 1; - goto done; - } + overflow= 1; + goto done; } } |