mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fixed Bug #2338 Trigonometric arithmetic problem
by fixing optimizer bug with help of 'volatile' keyword mysql-test/r/func_math.result: added tests for BUG #2338 Trigonometric arithmetic problems mysql-test/t/func_math.test: added tests for BUG #2338 Trigonometric arithmetic problems sql/item_func.cc: added keyword volatile in Item_func_acos::val and Item_func_asin::val to calm optimizer down and to avoid it's bug
This commit is contained in:
@ -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);
|
|||||||
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()
|
|||||||
|
|
||||||
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()
|
|||||||
|
|
||||||
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));
|
||||||
|
Reference in New Issue
Block a user