C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Classes | Functions
exprtk_montecarlo_pi.cpp File Reference
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#include "exprtk.hpp"
Include dependency graph for exprtk_montecarlo_pi.cpp:

Go to the source code of this file.

Classes

struct  rnd_01< T >
 

Functions

template<typename T >
void monte_carlo_pi ()
 
int main ()
 

Function Documentation

◆ main()

int main ( )

Definition at line 83 of file exprtk_montecarlo_pi.cpp.

84{
85 monte_carlo_pi<double>();
86 return 0;
87}

◆ monte_carlo_pi()

template<typename T >
void monte_carlo_pi ( )

Definition at line 45 of file exprtk_montecarlo_pi.cpp.

46{
47 typedef exprtk::symbol_table<T> symbol_table_t;
48 typedef exprtk::expression<T> expression_t;
49 typedef exprtk::parser<T> parser_t;
50
51 const std::string monte_carlo_pi_program =
52 " var max_samples := 5 * 10^7; "
53 " var count := 0; "
54 " "
55 " for (var i := 0; i < max_samples; i += 1) "
56 " { "
57 " if ((rnd_01^2 + rnd_01^2) <= 1) "
58 " count += 1; "
59 " }; "
60 " "
61 " (4 * count) / max_samples; ";
62
63 rnd_01<T> rnd01;
64
65 symbol_table_t symbol_table;
66 symbol_table.add_function("rnd_01",rnd01);
67
68 expression_t expression;
69 expression.register_symbol_table(symbol_table);
70
71 parser_t parser;
72 parser.compile(monte_carlo_pi_program,expression);
73
74 const T approximate_pi = expression.value();
75
76 const T real_pi = T(3.141592653589793238462643383279502); // or close enough...
77
78 printf("pi ~ %20.17f\terror: %20.17f\n",
79 approximate_pi,
80 std::abs(real_pi - approximate_pi));
81}