In my projects I often need to evaluate expressions. So I

created a class that provides evaluation of expressions with the

posibility to declare variables and easy functions. For this

article I include the XEvaluate-class in a ‘calculator’-dialog,

but normaly, I use the class in my application like this: XString

erg = Evaluate("1+2*sqr(3)").

!!! The XString-class that XEvaluate uses, was also

contributed at codeguru.

You can use external variables in a XDoubleMap. This typedef

is allready defined in XEvaluate.h (typedef CMap<CString,

LPCTSTR, double, double> XDoubleMap;):

XDoubleMap var; var["alpha"] = 10; var["beta"] = 20; var["test"] = 1.234; double erg = dtoa(Evaluate("alpha+beta", var));

It’s possible to use userdefined functions with one argument

(this argument has to be ‘x’)

Evaluate("f:=sin(x)+cos(x)"); double erg = dtoa(Evaluate("f(pi/2)"));

You can also call Evaluate with more than one expression, if

you divide the expressions by a semikolon:

double erg = dtoa(Evaluate("a=10;b=20;c=a+b");

The following functions and operations are included in

XEvaluate:

sin | cos | tan | trigonometric functions | |||

asin | acos | atan | inverse trigonometric functions | |||

rad | deg | gon | trigonometric calculation type | |||

pow | sqr | sqrt | exp | log | log10 | power, square, squareroot, exp, natural log, tenth log |

abs | int | fract | fak | cube | absolute, integer part, factional part, n!, cube | |

dec | hex | bin | char | outputtype | ||

fix | set the decimal digits | |||||

+ | – | * | / | add, sub, mul, div | ||

% | & | | | ^ | ! | ~ | modulo, binary and, or, xor, not, binary not |

< | > | <= | >= | == | != | less, greater, less or equal, greater or equal, equal, not equal |

= | += | -= | *= | /= | variable setting | |

@ | old value (result of the last calculation) | |||||

? | help (lists all functions) | |||||

# | reset (delete all functions and variables) | |||||

‘ | actual status (number of decimal digits, trigonometric mode and output mode) |
|||||

$ | var and function list |

Use the sample program to find out what’s possible with this

class.