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:
parent
4d9575d5eb
commit
a63319fc70
@ -247,6 +247,8 @@ void PFunction::FillFuncEvalTree(iter_t const& i, PFuncTreeNode &node)
|
|||||||
node.fFunctionTag = FUN_LN;
|
node.fFunctionTag = FUN_LN;
|
||||||
else if (!strcmp(str.c_str(), "EXP"))
|
else if (!strcmp(str.c_str(), "EXP"))
|
||||||
node.fFunctionTag = FUN_EXP;
|
node.fFunctionTag = FUN_EXP;
|
||||||
|
else if (!strcmp(str.c_str(), "SQRT"))
|
||||||
|
node.fFunctionTag = FUN_SQRT;
|
||||||
else {
|
else {
|
||||||
cerr << endl << "**PANIC ERROR**: function " << str << " doesn't exist, but you never should have reached this point!";
|
cerr << endl << "**PANIC ERROR**: function " << str << " doesn't exist, but you never should have reached this point!";
|
||||||
cerr << endl;
|
cerr << endl;
|
||||||
@ -442,11 +444,13 @@ Double_t PFunction::EvalNode(PFuncTreeNode &node)
|
|||||||
} else if (node.fFunctionTag == FUN_ATANH) {
|
} else if (node.fFunctionTag == FUN_ATANH) {
|
||||||
return atanh(EvalNode(node.children[0]));
|
return atanh(EvalNode(node.children[0]));
|
||||||
} else if (node.fFunctionTag == FUN_LOG) {
|
} 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) {
|
} else if (node.fFunctionTag == FUN_LN) {
|
||||||
return log(EvalNode(node.children[0]));
|
return log(EvalNode(node.children[0]));
|
||||||
} else if (node.fFunctionTag == FUN_EXP) {
|
} else if (node.fFunctionTag == FUN_EXP) {
|
||||||
return exp(EvalNode(node.children[0]));
|
return exp(EvalNode(node.children[0]));
|
||||||
|
} else if (node.fFunctionTag == FUN_SQRT) {
|
||||||
|
return sqrt(EvalNode(node.children[0]));
|
||||||
} else {
|
} else {
|
||||||
cerr << endl << "**PANIC ERROR**: PFunction::EvalNode: node.fID == PFunctionGrammar::functionID: you never should have reached this point!";
|
cerr << endl << "**PANIC ERROR**: PFunction::EvalNode: node.fID == PFunctionGrammar::functionID: you never should have reached this point!";
|
||||||
cerr << endl;
|
cerr << endl;
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
#define FUN_LOG 12
|
#define FUN_LOG 12
|
||||||
#define FUN_LN 13
|
#define FUN_LN 13
|
||||||
#define FUN_EXP 14
|
#define FUN_EXP 14
|
||||||
|
#define FUN_SQRT 15
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
typedef struct func_tree_node {
|
typedef struct func_tree_node {
|
||||||
|
@ -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("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("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("EXP") ] >> ch_p('(') ] >> expression >> ch_p(')')
|
||||||
|
| lexeme_d[ root_node_d[ str_p("SQRT") ] >> ch_p('(') ] >> expression >> ch_p(')')
|
||||||
;
|
;
|
||||||
|
|
||||||
factor = real
|
factor = real
|
||||||
|
Loading…
x
Reference in New Issue
Block a user