diff --git a/exprtk_simple_example_19.cpp b/exprtk_simple_example_19.cpp
new file mode 100644
index 0000000..186cd5a
--- /dev/null
+++ b/exprtk_simple_example_19.cpp
@@ -0,0 +1,129 @@
+/*
+ **************************************************************
+ *         C++ Mathematical Expression Toolkit Library        *
+ *                                                            *
+ * Simple Example 19                                          *
+ * 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>
+class randu : public exprtk::igeneric_function<T>
+{
+public:
+
+   typedef typename exprtk::igeneric_function<T> igfun_t;
+   typedef typename igfun_t::parameter_list_t    parameter_list_t;
+   typedef typename igfun_t::generic_type        generic_type;
+   typedef typename generic_type::vector_view    vector_t;
+
+   using exprtk::igeneric_function<T>::operator();
+
+   randu()
+   : exprtk::igeneric_function<T>("V|VTT")
+      /*
+         Overloads:
+         0. V   - vector
+         1. VTT - vector, r0, r1
+      */
+   { ::srand(static_cast<unsigned int>(time(NULL))); }
+
+   inline T operator()(const std::size_t& ps_index, parameter_list_t parameters)
+   {
+      vector_t v(parameters[0]);
+
+      std::size_t r0 = 0;
+      std::size_t r1 = v.size() - 1;
+
+      if (
+           (1 == ps_index) &&
+           !exprtk::rtl::vecops::helper::
+              load_vector_range<T>::process(parameters,r0,r1,1,2,0)
+         )
+         return T(0);
+
+      for (std::size_t i = r0; i <= r1; ++i)
+      {
+         v[i] = rnd();
+      }
+
+      return T(1);
+   }
+
+private:
+
+   inline T rnd()
+   {
+      // Note: Do not use this in production
+      // Result is in the interval [0,1)
+      return T(::rand() / T(RAND_MAX + 1.0));
+   }
+};
+
+template <typename T>
+void vector_randu()
+{
+   typedef exprtk::symbol_table<T> symbol_table_t;
+   typedef exprtk::expression<T>     expression_t;
+   typedef exprtk::parser<T>             parser_t;
+
+   std::string vecrandu_program =
+                " var noise[6] := [0];                     "
+                "                                          "
+                " if (randu(noise,0,5) == false)           "
+                " {                                        "
+                "   println('Failed to generate noise');   "
+                "   return [false];                        "
+                " }                                        "
+                "                                          "
+                " var noisy[6] := signal + (noise - 1/2);  "
+                "                                          "
+                " for (var i := 0; i < noisy[]; i += 1)    "
+                " {                                        "
+                "   println('noisy[',i,'] = ', noisy[i]);  "
+                " }                                        "
+                "                                          "
+                " println('avg: ', avg(noisy));            "
+                "                                          ";
+
+   T signal[] = { T(1.1), T(2.2), T(3.3), T(4.4), T(5.5), T(6.6), T(7.7) };
+
+   exprtk::rtl::io::println<T> println;
+   randu<T>                    randu;
+
+   symbol_table_t symbol_table;
+   symbol_table.add_vector  ("signal" , signal);
+   symbol_table.add_function("println",println);
+   symbol_table.add_function("randu"  ,  randu);
+
+   expression_t expression;
+   expression.register_symbol_table(symbol_table);
+
+   parser_t parser;
+   parser.compile(vecrandu_program,expression);
+
+   expression.value();
+}
+
+int main()
+{
+   vector_randu<double>();
+   return 0;
+}