## Example code

If you put all this together, you get the source code for a small application. The application defines a parser variables ("`a`") and adds a user defined functions named "`MyFunc`". When using the parser make sure that you don't forget to catch the `Parser::exception_type` in your application. It contains detailed information helping you to find syntax errors in your formula.

    #include <iostream>
    #include "muParser.h"

    // Function callback
    double MySqr(double a_fVal)
    {
      return a_fVal*a_fVal;
    }

    // main program
    int main(int argc, char* argv[])
    {
      using namespace mu;

      try
      {
        double fVal = 1;
        Parser p;
        p.DefineVar("a", &fVal);
        p.DefineFun("MySqr", MySqr);
        p.SetExpr("MySqr(a)*_pi+min(10,a)");

        for (std::size_t a=0; a<100; ++a)
        {
          fVal = a;  // Change value of variable a
          std::cout << p.Eval() << std::endl;
        }
      }
      catch (Parser::exception_type &e)
      {
        std::cout << e.GetMsg() << std::endl;
      }
      return 0;
    }

## Benchmarks

Finally, I'd like to give you some benchmarks. The benchmarking was done on an Intel Pentium P-4 with 2.6 GHz, with a version compiled by using MSVC++ 7.1 (Standard edition). The diagram shows number of evaluations per seconds vs. expression length. I compared both the static lib and the dll version with two other parsers that are freely available on the net, very fast and have a similar set of features. One of them is a commercial product.

A higher curve means better performance. Expressions were created randomly. They used only `sin` and `cos` functions and contained multiple variables and constants. In order to smoothen the curves each point represents the value of a running average over 10 sample expressions.