make more function available to mupp (sinh, .., asin, .., and sqrt)

This commit is contained in:
suter_a 2020-06-20 09:44:14 +02:00
parent 5ec1228ea6
commit a09d6878f2
3 changed files with 56 additions and 1 deletions

View File

@ -70,9 +70,16 @@ namespace mupp { namespace ast
fun_sin, fun_sin,
fun_cos, fun_cos,
fun_tan, fun_tan,
fun_sinh,
fun_cosh,
fun_tanh,
fun_asin,
fun_acos,
fun_atan,
fun_exp, fun_exp,
fun_log, fun_log,
fun_ln fun_ln,
fun_sqrt
}; };
struct nil {}; struct nil {};

View File

@ -86,9 +86,16 @@ namespace mupp { namespace parser
("sin", ast::fun_sin) ("sin", ast::fun_sin)
("cos", ast::fun_cos) ("cos", ast::fun_cos)
("tan", ast::fun_tan) ("tan", ast::fun_tan)
("sinh", ast::fun_sinh)
("cosh", ast::fun_cosh)
("tanh", ast::fun_tanh)
("asin", ast::fun_asin)
("acos", ast::fun_acos)
("atan", ast::fun_atan)
("exp", ast::fun_exp) ("exp", ast::fun_exp)
("log", ast::fun_log) ("log", ast::fun_log)
("ln", ast::fun_ln) ("ln", ast::fun_ln)
("sqrt", ast::fun_sqrt)
; ;
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////

View File

@ -102,9 +102,16 @@ namespace mupp { namespace prog {
case ast::fun_sin: case ast::fun_sin:
case ast::fun_cos: case ast::fun_cos:
case ast::fun_tan: case ast::fun_tan:
case ast::fun_sinh:
case ast::fun_cosh:
case ast::fun_tanh:
case ast::fun_asin:
case ast::fun_acos:
case ast::fun_atan:
case ast::fun_exp: case ast::fun_exp:
case ast::fun_log: case ast::fun_log:
case ast::fun_ln: case ast::fun_ln:
case ast::fun_sqrt:
break; break;
default: default:
BOOST_ASSERT(0); BOOST_ASSERT(0);
@ -412,6 +419,30 @@ namespace mupp { namespace prog {
for (unsigned int i=0; i<vec.size(); i++) for (unsigned int i=0; i<vec.size(); i++)
vec[i] = tan(vec[i]); vec[i] = tan(vec[i]);
break; break;
case ast::fun_sinh:
for (unsigned int i=0; i<vec.size(); i++)
vec[i] = sinh(vec[i]);
break;
case ast::fun_cosh:
for (unsigned int i=0; i<vec.size(); i++)
vec[i] = cosh(vec[i]);
break;
case ast::fun_tanh:
for (unsigned int i=0; i<vec.size(); i++)
vec[i] = tanh(vec[i]);
break;
case ast::fun_asin:
for (unsigned int i=0; i<vec.size(); i++)
vec[i] = asin(vec[i]);
break;
case ast::fun_acos:
for (unsigned int i=0; i<vec.size(); i++)
vec[i] = acos(vec[i]);
break;
case ast::fun_atan:
for (unsigned int i=0; i<vec.size(); i++)
vec[i] = atan(vec[i]);
break;
case ast::fun_exp: case ast::fun_exp:
for (unsigned int i=0; i<vec.size(); i++) for (unsigned int i=0; i<vec.size(); i++)
vec[i] = exp(vec[i]); vec[i] = exp(vec[i]);
@ -436,6 +467,16 @@ namespace mupp { namespace prog {
} }
} }
break; break;
case ast::fun_sqrt:
for (unsigned int i=0; i<vec.size(); i++) {
if (vec[i] <= 0.0) {
BOOST_ASSERT(0);
break;
} else {
vec[i] = sqrt(vec[i]);
}
}
break;
default: default:
BOOST_ASSERT(0); BOOST_ASSERT(0);
break; break;