summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <kaa@polly.local>2006-11-14 16:40:35 +0300
committerunknown <kaa@polly.local>2006-11-14 16:40:35 +0300
commit266bf3390c80e72fecdcec3712dfad18c4bf6b5b (patch)
tree0046c29999d7ff7c034cd5ebce06d52db67eb227
parent5e508a35d536152d3e02ec478873a312ad5f3682 (diff)
parentd61e3d1f18492a4217b566940780cf5085cebb75 (diff)
downloadmariadb-git-266bf3390c80e72fecdcec3712dfad18c4bf6b5b.tar.gz
Merge polly.local:/tmp/maint/bug22129/my51-bug22129
into polly.local:/home/kaa/src/maint/mysql-5.1-maint
-rw-r--r--mysql-test/r/type_float.result2
-rw-r--r--strings/strtod.c20
2 files changed, 5 insertions, 17 deletions
diff --git a/mysql-test/r/type_float.result b/mysql-test/r/type_float.result
index d28131cc456..73f5e54ecc3 100644
--- a/mysql-test/r/type_float.result
+++ b/mysql-test/r/type_float.result
@@ -264,7 +264,7 @@ a decimal(21,2) NO 0.00
drop table t1,t2,t3;
select 1e-308, 1.00000001e-300, 100000000e-300;
1e-308 1.00000001e-300 100000000e-300
-0 1.00000001e-300 1e-292
+1e-308 1.00000001e-300 1e-292
select 10e307;
10e307
1e+308
diff --git a/strings/strtod.c b/strings/strtod.c
index ddb570718a0..932a34f921d 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;
}
}