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
 
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
