mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge polly.local:/tmp/maint/bug22129/my41-bug22129
into polly.local:/tmp/maint/bug22129/my50-bug22129 mysql-test/r/type_float.result: Auto merged strings/strtod.c: Auto merged
This commit is contained in:
@ -264,7 +264,7 @@ a decimal(21,2) NO 0.00
|
|||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
select 1e-308, 1.00000001e-300, 100000000e-300;
|
select 1e-308, 1.00000001e-300, 100000000e-300;
|
||||||
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;
|
select 10e307;
|
||||||
10e307
|
10e307
|
||||||
1e+308
|
1e+308
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
#define MAX_DBL_EXP 308
|
#define MAX_DBL_EXP 308
|
||||||
#define MAX_RESULT_FOR_MAX_EXP 1.7976931348623157
|
#define MAX_RESULT_FOR_MAX_EXP 1.7976931348623157
|
||||||
#define MIN_RESULT_FOR_MIN_EXP 2.225073858507202
|
|
||||||
static double scaler10[] = {
|
static double scaler10[] = {
|
||||||
1.0, 1e10, 1e20, 1e30, 1e40, 1e50, 1e60, 1e70, 1e80, 1e90
|
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);
|
order= exp + (neg_exp ? -1 : 1) * (ndigits - 1);
|
||||||
if (order < 0)
|
if (order < 0)
|
||||||
order= -order;
|
order= -order;
|
||||||
if (order >= MAX_DBL_EXP && result)
|
if (order >= MAX_DBL_EXP && !neg_exp && result)
|
||||||
{
|
{
|
||||||
double c;
|
double c;
|
||||||
/* Compute modulus of C (see comment above) */
|
/* Compute modulus of C (see comment above) */
|
||||||
c= result / scaler * 10.0;
|
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)
|
overflow= 1;
|
||||||
{
|
goto done;
|
||||||
result= 0.0;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (order > MAX_DBL_EXP || c > MAX_RESULT_FOR_MAX_EXP)
|
|
||||||
{
|
|
||||||
overflow= 1;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user