X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/50a00235743c59840ee2db2258e9e6dd7444f646..9ec598fc7b8d73ed8e9822aed084ad1e1b2918b6:/main.cpp diff --git a/main.cpp b/main.cpp index 5326e73..907869e 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,7 @@ +#include #include #include +#include #include #include #include @@ -87,16 +89,19 @@ static void check_for_lost_load() static void compute_load_imbalance() { + using std::tr1::bind; + using std::tr1::placeholders::_1; + unsigned n = loads.size(); load_avg = std::accumulate(loads.begin(), loads.end(), 0.0) / n; - double variance = 0.0; - double epsilon = 0.0; - for (unsigned i = 0 ; i < n ; ++i) { - double diff = loads[i] - load_avg; - variance += diff * diff; - epsilon += diff; - } - variance = (variance - (epsilon * epsilon) / n) / n; + + std::vector diff(loads); + std::transform(diff.begin(), diff.end(), diff.begin(), + bind(std::minus(), _1, load_avg)); + double epsilon = std::accumulate(diff.begin(), diff.end(), 0.0); + double square_sum = std::inner_product(diff.begin(), diff.end(), + diff.begin(), 0.0); + double variance = (square_sum - (epsilon * epsilon) / n) / n; load_stddev = sqrt(variance); } @@ -128,7 +133,7 @@ int main(int argc, char* argv[]) MSG_global_init(&argc, argv); // Parse global parameters - int parse_res = opt::parse_args(&argc, argv); + bool parse_res = opt::parse_args(&argc, argv); if (!parse_res || opt::version_requested || opt::help_requested) { if (opt::version_requested)