@@ -279,31 +279,28 @@ void chaser_check::do_update(object_key channel, uint64_t speed,
279279 return ;
280280 }
281281
282- const auto rate = std::accumulate (speeds_.begin (), speeds_.end (), 0.0 ,
283- [](double sum, const auto & element) NOEXCEPT
284- {
285- return sum + element.second ;
286- });
282+ double sum = 0.0 ;
283+ double sum_squares = 0.0 ;
284+ for (const auto & element : speeds_)
285+ {
286+ sum += element.second ;
287+ sum_squares += std::pow (element.second , two);
288+ }
287289
288- const auto mean = rate / count;
290+ const auto mean = sum / count;
289291 if (speed >= mean)
290292 {
291293 handler (error::success);
292294 return ;
293295 }
294296
295- const auto variance = std::accumulate (speeds_.begin (), speeds_.end (), 0.0 ,
296- [mean](double sum, const auto & element) NOEXCEPT
297- {
298- return sum + std::pow (element.second - mean, two);
299- }) / (sub1 (count));
300-
297+ const auto variance = (sum_squares - (sum * sum) / count) / sub1 (count);
301298 const auto sdev = std::sqrt (variance);
302299 const auto slow = (mean - speed) > (allowed_deviation_ * sdev);
303300
304301 // Only speed < mean channels are logged.
305302 LOGV (" Below average channel (" << count << " ) rate ("
306- << to_kilobits_per_second (rate) << " ) mean ("
303+ << to_kilobits_per_second (sum) << " ) mean ("
307304 << to_kilobits_per_second (mean) << " ) sdev ("
308305 << to_kilobits_per_second (sdev) << " ) Kbps [" << (slow ? " *" : " " )
309306 << to_kilobits_per_second (to_floating (speed)) << " ]." );
0 commit comments