diff --git a/montecarlo/montecarlo/main.cpp b/montecarlo/montecarlo/main.cpp index d7c167a..607ede4 100644 --- a/montecarlo/montecarlo/main.cpp +++ b/montecarlo/montecarlo/main.cpp @@ -9,53 +9,76 @@ #include #include #include +#include -void compute(std::atomic &inside, long long iterations){ - long long to_add = 0; +struct stats { + std::atomic iterations; + std::atomic points_inside; + std::chrono::time_point start_time; + + stats(std::chrono::time_point start){ + iterations = 0; + points_inside = 0; + start_time = start; + } +}; + +void compute(std::atomic &inside, std::atomic &iterations){ unsigned int seed = (unsigned int) std::chrono::system_clock::now().time_since_epoch().count(); std::mt19937 e2(seed); std::uniform_real_distribution dis(0.0, 1.0); - for(int i=0; i inside(0); +void monte_carlo(stats &stats){ std::vector threads; int threadcount = std::thread::hardware_concurrency();; - long long actual_n = iterations - iterations % threadcount; - for(int i=0; i(std::chrono::steady_clock::now()-full_stats.start_time); - return inside * 4 / (double)actual_n; + double iterations_per_second = full_stats.iterations / time_ms.count() * 1000; + + std::cout << "ran for "< pi_values; - double pi_average = 0; - for(int i=0; i<10; i++){ - double pi = monte_carlo(1e9); - std::cout << "Computed pi #"<