**Optimized for speed**- High parsing performance
- if-then-else operator with lazy evaluation
- Compute multiple comma separated subexpressions in a single evaluation. (i.e. "sin(x), x+y, x*x")

**User-defined operators**- binary operators
- postfix operators
- infix operators

**User-defined functions**- with a fixed number of up to five arguments
- with variable number of arguments
- with a single string argument (for database queries)

**User-defined constants.**- numeric constants
- string constants

**User-defined variables.**- unlimited in number
- definable at parser runtime by the parser
- assigning variables in terms of other variables is possible

**Custom value recognition callbacks**- support for binary and hex values.
- can be used to implement database queries

**Default implementaion with many features**- 25 predefined functions.
- 14 predefined operators.
- Supports numerical differentiation with respect to a given variable.
- Assignement operator is supported

**Portability**- Project / makefiles for MSVC, mingw, autoconf, bcc
- ISO 14882 compliant code
- DLL version usable from every language able to use function exported in C-style

**Unit support**- Use postfix operators as unit multipliers
`(3m -> 0.003)`

- Use postfix operators as unit multipliers
**Localization**- Argument separator, decimal separator, thousands separator can be adjusted to your locale

This section gives an overview on the default features supported by the parser. The default
implementation is defined in the class `mu::Parser`

located in the file
*muParser.cpp*. The DLL-version uses this class internally.

The following table gives an overview of the functions supported by the default implementation. It lists the function names, the number of arguments and a brief description.

Name | Argc. | Explanation |

`sin` | 1 | sine function |

`cos` | 1 | cosine function |

`tan` | 1 | tangens function |

`asin` | 1 | arcus sine function |

`acos` | 1 | arcus cosine function |

`atan` | 1 | arcus tangens function |

`sinh` | 1 | hyperbolic sine function |

`cosh` | 1 | hyperbolic cosine |

`tanh` | 1 | hyperbolic tangens function |

`asinh` | 1 | hyperbolic arcus sine function |

`acosh` | 1 | hyperbolic arcus tangens function |

`atanh` | 1 | hyperbolic arcur tangens function |

`log2` | 1 | logarithm to the base 2 |

`log10` | 1 | logarithm to the base 10 |

`log` | 1 | logarithm to base e (2.71828...) |

`ln` | 1 | logarithm to base e (2.71828...) |

`exp` | 1 | e raised to the power of x |

`sqrt` | 1 | square root of a value |

`sign` | 1 | sign function -1 if x<0; 1 if x>0 |

`rint` | 1 | round to nearest integer |

`abs` | 1 | absolute value |

`min` | var. | min of all arguments |

`max` | var. | max of all arguments |

`sum` | var. | sum of all arguments |

`avg` | var. | mean value of all arguments |

The following table lists the default binary operators supported by the parser.

Operator | Description | Priority |

`=` | assignement | -1 |

`&&` | logical and | 1 |

`||` | logical or | 2 |

`<=` | less or equal | 4 |

`>=` | greater or equal | 4 |

`!=` | not equal | 4 |

`==` | equal | 4 |

`>` | greater than | 4 |

`<` | less than | 4 |

`+` | addition | 5 |

`-` | subtraction | 5 |

`*` | multiplication | 6 |

`/` | division | 6 |

`^` | raise x to the power of y | 7 |

muParser has built in support for the if then else operator. It uses lazy evaluation in order to make sure only the necessary branch of the expression is evaluated.

Operator | Description | Remarks |

`?:` | if then else operator | C++ style syntax |

You might also like: