Added the possibility to use sqrt() in the FUNCTION block - it could be removed again when finally pow() will be implemented

This commit is contained in:
Bastian M. Wojek 2010-03-06 23:53:53 +00:00
parent 4d9575d5eb
commit a63319fc70
3 changed files with 7 additions and 1 deletions

View File

@ -247,6 +247,8 @@ void PFunction::FillFuncEvalTree(iter_t const& i, PFuncTreeNode &node)
node.fFunctionTag = FUN_LN;
else if (!strcmp(str.c_str(), "EXP"))
node.fFunctionTag = FUN_EXP;
else if (!strcmp(str.c_str(), "SQRT"))
node.fFunctionTag = FUN_SQRT;
else {
cerr << endl << "**PANIC ERROR**: function " << str << " doesn't exist, but you never should have reached this point!";
cerr << endl;
@ -442,11 +444,13 @@ Double_t PFunction::EvalNode(PFuncTreeNode &node)
} else if (node.fFunctionTag == FUN_ATANH) {
return atanh(EvalNode(node.children[0]));
} else if (node.fFunctionTag == FUN_LOG) {
return log(EvalNode(node.children[0]))/log(10);
return log(EvalNode(node.children[0]))/log(10.0);
} else if (node.fFunctionTag == FUN_LN) {
return log(EvalNode(node.children[0]));
} else if (node.fFunctionTag == FUN_EXP) {
return exp(EvalNode(node.children[0]));
} else if (node.fFunctionTag == FUN_SQRT) {
return sqrt(EvalNode(node.children[0]));
} else {
cerr << endl << "**PANIC ERROR**: PFunction::EvalNode: node.fID == PFunctionGrammar::functionID: you never should have reached this point!";
cerr << endl;

View File

@ -69,6 +69,7 @@
#define FUN_LOG 12
#define FUN_LN 13
#define FUN_EXP 14
#define FUN_SQRT 15
//----------------------------------------------------------------------------
typedef struct func_tree_node {

View File

@ -105,6 +105,7 @@ struct PFunctionGrammar : public grammar<PFunctionGrammar>
| lexeme_d[ root_node_d[ str_p("LOG") ] >> ch_p('(') ] >> expression >> ch_p(')')
| lexeme_d[ root_node_d[ str_p("LN") ] >> ch_p('(') ] >> expression >> ch_p(')')
| lexeme_d[ root_node_d[ str_p("EXP") ] >> ch_p('(') ] >> expression >> ch_p(')')
| lexeme_d[ root_node_d[ str_p("SQRT") ] >> ch_p('(') ] >> expression >> ch_p(')')
;
factor = real