File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8,6 +8,16 @@ cc_library(
88 ],
99)
1010
11+ cc_library (
12+ name = "montecarloLib" ,
13+ srcs = [
14+ "montecarlo.cpp"
15+ ],
16+ hdrs = [
17+ "montecarlo.h"
18+ ],
19+ )
20+
1121cc_binary (
1222 name = "mainProg" ,
1323 srcs = [
@@ -16,5 +26,6 @@ cc_binary(
1626 ],
1727 deps = [
1828 ":factorLib" ,
29+ ":montecarloLib" ,
1930 ],
2031)
Original file line number Diff line number Diff line change @@ -25,4 +25,8 @@ int main(int argc, char** argv)
2525 cout << result << " ," ;
2626 }
2727 cout << endl;
28+
29+ auto monteCarloPi = MonteCarloPi ();
30+ double pi = monteCarloPi.estimatePi ();
31+ cout << " The estimated pi is: " << pi << endl;
2832}
Original file line number Diff line number Diff line change 44#include < iostream>
55#include < stdexcept>
66#include " factor.h"
7+ #include " montecarlo.h"
78
89#endif
Original file line number Diff line number Diff line change 11#include " montecarlo.h"
22
33const int NUM = 4 ;
4- const int NUM_EACH_THREAD = 10000 ;
4+ const int NUM_EACH_THREAD = 10000000 ;
55
6- double MonteCarloPi::estimatePiSingleThread ()
6+ void MonteCarloPi::estimatePiSingleThread ()
77{
8-
8+ random_device rd;
9+ // mersenne_twister_engine seeded with rd()
10+ mt19937 gen (rd ());
11+ uniform_int_distribution<> distrib (0.0 , 1.0 );
12+ for (int i = 0 ; i < NUM_EACH_THREAD ; i++)
13+ {
14+ double x = distrib (gen);
15+ double y = distrib (gen);
16+ if (x*x + y*y <= 1.0 )
17+ insideCircle++;
18+ }
919}
1020
11- void MonteCarloPi::estimatePi ()
21+ double MonteCarloPi::estimatePi ()
1222{
13- // 4 threads, each threads do calculation 10000 times
23+ for (int i = 0 ; i < NUM ; i++)
24+ {
25+ threads.emplace_back (&MonteCarloPi::estimatePiSingleThread, this );
26+ }
27+
28+ for (auto & t : threads)
29+ {
30+ t.join ();
31+ }
32+
33+ // return pi here
34+ return (4.0 * insideCircle / (NUM * NUM_EACH_THREAD ));
1435}
Original file line number Diff line number Diff line change @@ -10,13 +10,17 @@ using namespace std;
1010class MonteCarloPi
1111{
1212public:
13- double estimatePiSingleThread ();
14- void estimatePi ();
13+ MonteCarloPi& operator =(const MonteCarloPi&) = delete ;
14+
15+ MonteCarloPi () = default ;
16+ ~MonteCarloPi () = default ;
17+
18+ void estimatePiSingleThread ();
19+ double estimatePi ();
1520
1621private:
1722 vector<thread> threads = {};
1823 atomic<int > insideCircle = 0 ;
19-
2024};
2125
2226#endif
You can’t perform that action at this time.
0 commit comments