#include "utility.hpp" #include #include namespace phosphor { namespace fan { namespace control { namespace utility { int64_t getMedian(std::vector& values) { if (values.empty()) { throw std::out_of_range("getMedian(): Empty list of values"); } const auto oddIt = values.begin() + values.size() / 2; std::nth_element(values.begin(), oddIt, values.end()); auto median = *oddIt; // Determine median for even number of values if (values.size() % 2 == 0) { // Use average of middle 2 values for median const auto evenIt = values.begin() + values.size() / 2 - 1; std::nth_element(values.begin(), evenIt, values.end()); median = (median + *evenIt) / 2; } return median; } } // namespace utility } // namespace control } // namespace fan } // namespace phosphor