Fixed Bug #2338 Trigonometric arithmetic problem

by fixing optimizer bug with help of 'volatile' keyword
parent 8a409722
...@@ -20,3 +20,15 @@ PI() sin(pi()/2) cos(pi()/2) abs(tan(pi())) cot(1) asin(1) acos(0) atan(1) ...@@ -20,3 +20,15 @@ PI() sin(pi()/2) cos(pi()/2) abs(tan(pi())) cot(1) asin(1) acos(0) atan(1)
3.141593 1.000000 0.000000 0.000000 0.64209262 1.570796 1.570796 0.785398 3.141593 1.000000 0.000000 0.000000 0.64209262 1.570796 1.570796 0.785398
degrees(pi()) radians(360) degrees(pi()) radians(360)
180 6.2831853071796 180 6.2831853071796
ACOS(1.0)
0.000000
ASIN(1.0)
1.570796
ACOS(0.2*5.0)
0.000000
ACOS(0.5*2.0)
0.000000
ASIN(0.8+0.2)
1.570796
ASIN(1.2-0.2)
1.570796
...@@ -13,3 +13,14 @@ select pow(10,log10(10)),power(2,4); ...@@ -13,3 +13,14 @@ select pow(10,log10(10)),power(2,4);
select rand(999999),rand(); select rand(999999),rand();
select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1); select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1);
select degrees(pi()),radians(360); select degrees(pi()),radians(360);
#
# Bug #2338 Trignometric arithmatic problems
#
SELECT ACOS(1.0);
SELECT ASIN(1.0);
SELECT ACOS(0.2*5.0);
SELECT ACOS(0.5*2.0);
SELECT ASIN(0.8+0.2);
SELECT ASIN(1.2-0.2);
...@@ -456,7 +456,8 @@ double Item_func_pow::val() ...@@ -456,7 +456,8 @@ double Item_func_pow::val()
double Item_func_acos::val() double Item_func_acos::val()
{ {
double value=args[0]->val(); // this 'volatile' was added as a fix for BUG #2338 to calm optimizer down
volatile double value=args[0]->val();
if ((null_value=(args[0]->null_value || (value < -1.0 || value > 1.0)))) if ((null_value=(args[0]->null_value || (value < -1.0 || value > 1.0))))
return 0.0; return 0.0;
return fix_result(acos(value)); return fix_result(acos(value));
...@@ -464,7 +465,8 @@ double Item_func_acos::val() ...@@ -464,7 +465,8 @@ double Item_func_acos::val()
double Item_func_asin::val() double Item_func_asin::val()
{ {
double value=args[0]->val(); // this 'volatile' was added as a fix for BUG #2338 to calm optimizer down
volatile double value=args[0]->val();
if ((null_value=(args[0]->null_value || (value < -1.0 || value > 1.0)))) if ((null_value=(args[0]->null_value || (value < -1.0 || value > 1.0))))
return 0.0; return 0.0;
return fix_result(asin(value)); return fix_result(asin(value));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment