Skip to content

Commit e538a8e

Browse files
committed
Simplify/optimize peer standard deviation calc.
1 parent 0e305fe commit e538a8e

1 file changed

Lines changed: 10 additions & 13 deletions

File tree

src/chasers/chaser_check.cpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)