C++ Mathematical Expression Library (ExprTk)  http://www.partow.net/programming/exprtk/index.html
diff --git a/Makefile b/Makefile
index 59a7110..9a2042e 100644
--- a/Makefile
+++ b/Makefile
@@ -40,6 +40,7 @@
 BUILD_LIST+=exprtk_simple_example_14
 BUILD_LIST+=exprtk_simple_example_15
 BUILD_LIST+=exprtk_simple_example_16
+BUILD_LIST+=exprtk_simple_example_17
 
 
 all: $(BUILD_LIST)
diff --git a/exprtk_simple_example_09.cpp b/exprtk_simple_example_09.cpp
index 2ee1a23..58f495f 100644
--- a/exprtk_simple_example_09.cpp
+++ b/exprtk_simple_example_09.cpp
@@ -44,18 +44,18 @@
       .add(
       function_t(
            "is_prime_impl1",
-           "if (y == 1,true,               "
-           "   if (0 == (x % y),false,     "
-           "      is_prime_impl1(x,y - 1)))",
+           " if (y == 1,true,                "
+           "    if (0 == (x % y),false,      "
+           "       is_prime_impl1(x,y - 1))) ",
            "x","y"));
 
    compositor
       .add(
       function_t(
            "is_prime1",
-           "if (frac(x) != 0, false,                               "
-           "   if (x <= 0, false,                                  "
-           "      is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1))))",
+           " if (frac(x) != 0, false,                                "
+           "    if (x <= 0, false,                                   "
+           "       is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
            "x"));
 
    //Mode 2 - switch statement based
@@ -63,24 +63,24 @@
       .add(
       function_t(
            "is_prime_impl2",
-           "switch                                        "
-           "{                                             "
-           "  case y == 1       : true;                   "
-           "  case (x % y) == 0 : false;                  "
-           "  default           : is_prime_impl2(x,y - 1);"
-           "}                                             ",
+           " switch                                         "
+           " {                                              "
+           "   case y == 1       : true;                    "
+           "   case (x % y) == 0 : false;                   "
+           "   default           : is_prime_impl2(x,y - 1); "
+           " }                                              ",
            "x","y"));
 
    compositor
       .add(
       function_t(
            "is_prime2",
-           "switch                                                                "
-           "{                                                                     "
-           "  case x <= 0       : false;                                          "
-           "  case frac(x) != 0 : false;                                          "
-           "  default           : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));"
-           "}                                                                     ",
+           " switch                                                                 "
+           " {                                                                      "
+           "   case x <= 0       : false;                                           "
+           "   case frac(x) != 0 : false;                                           "
+           "   default           : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1)); "
+           " }                                                                      ",
            "x"));
 
    //Mode 3 - switch statement and while-loop based
@@ -88,27 +88,27 @@
       .add(
       function_t(
            "is_prime_impl3",
-           "while (y > 0)                           "
-           "{                                       "
-           "  switch                                "
-           "  {                                     "
-           "    case y == 1       : ~(y := 0,true); "
-           "    case (x % y) == 0 : ~(y := 0,false);"
-           "    default           : y := y - 1;     "
-           "  }                                     "
-           "}                                       ",
+           " while (y > 0)                            "
+           " {                                        "
+           "   switch                                 "
+           "   {                                      "
+           "     case y == 1       : ~(y := 0,true);  "
+           "     case (x % y) == 0 : ~(y := 0,false); "
+           "     default           : y := y - 1;      "
+           "   }                                      "
+           " }                                        ",
            "x","y"));
 
    compositor
       .add(
       function_t(
            "is_prime3",
-           "switch                                                                "
-           "{                                                                     "
-           "  case x <= 0       : false;                                          "
-           "  case frac(x) != 0 : false;                                          "
-           "  default           : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));"
-           "}                                                                     ",
+           " switch                                                                 "
+           " {                                                                      "
+           "   case x <= 0       : false;                                           "
+           "   case frac(x) != 0 : false;                                           "
+           "   default           : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1)); "
+           " }                                                                      ",
            "x"));
 
    std::string expression_str1 = "is_prime1(x)";
diff --git a/exprtk_simple_example_17.cpp b/exprtk_simple_example_17.cpp
new file mode 100644
index 0000000..9534bbc
--- /dev/null
+++ b/exprtk_simple_example_17.cpp
@@ -0,0 +1,75 @@
+/*
+ **************************************************************
+ *         C++ Mathematical Expression Toolkit Library        *
+ *                                                            *
+ * Simple Example 17                                          *
+ * Author: Arash Partow (1999-2016)                           *
+ * URL: http://www.partow.net/programming/exprtk/index.html   *
+ *                                                            *
+ * Copyright notice:                                          *
+ * Free use of the Mathematical Expression Toolkit Library is *
+ * permitted under the guidelines and in accordance with the  *
+ * most current version of the Common Public License.         *
+ * http://www.opensource.org/licenses/cpl1.0.php              *
+ *                                                            *
+ **************************************************************
+*/
+
+
+#include <cstdio>
+#include <cstdlib>
+#include <ctime>
+#include <string>
+
+#include "exprtk.hpp"
+
+
+template <typename T>
+struct rnd_01 : public exprtk::ifunction<T>
+{
+   rnd_01() : exprtk::ifunction<T>(0)
+   { ::srand(static_cast<unsigned int>(time(NULL))); }
+
+   inline T operator()()
+   {
+      // Note: Do not use this in production
+      return T(::rand() / T(RAND_MAX + 1));
+   }
+};
+
+template <typename T>
+void monte_carlo_pi()
+{
+   typedef exprtk::symbol_table<T> symbol_table_t;
+   typedef exprtk::expression<T>     expression_t;
+   typedef exprtk::parser<T>             parser_t;
+
+   std::string monte_carlo_pi_program =
+                  " var experiments[5 * 10^7] := [(rnd_01^2 + rnd_01^2) <= 1]; "
+                  " 4 * sum(experiments) / experiments[];                      ";
+
+   rnd_01<T> rnd01;
+
+   symbol_table_t symbol_table;
+   symbol_table.add_function("rnd_01",rnd01);
+
+   expression_t expression;
+   expression.register_symbol_table(symbol_table);
+
+   parser_t parser;
+   parser.compile(monte_carlo_pi_program,expression);
+
+   const T approximate_pi = expression.value();
+
+   const T real_pi = T(3.141592653589793238462);
+
+   printf("pi ~ %20.17f\terror: %20.17f\n",
+          approximate_pi,
+          std::abs(real_pi - approximate_pi));
+}
+
+int main()
+{
+   monte_carlo_pi<double>();
+   return 0;
+}
diff --git a/readme.txt b/readme.txt
index 291c59d..2ed1891 100644
--- a/readme.txt
+++ b/readme.txt
@@ -2900,6 +2900,7 @@
    (18) exprtk_simple_example_14.cpp
    (19) exprtk_simple_example_15.cpp
    (20) exprtk_simple_example_16.cpp
+   (21) exprtk_simple_example_17.cpp
 
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~