| 160 | } |
| 161 | |
| 162 | double computeMedian(const std::vector<unsigned>& numbers) |
| 163 | { |
| 164 | if (numbers.empty()) |
| 165 | return std::numeric_limits<double>::quiet_NaN(); |
| 166 | |
| 167 | const auto numNumbers{ numbers.size() }; |
| 168 | const auto middleIndex{ numNumbers / 2 }; |
| 169 | if (numNumbers % 2) |
| 170 | { |
| 171 | return numbers[middleIndex]; |
| 172 | } |
| 173 | else |
| 174 | { |
| 175 | return (numbers[middleIndex] + numbers[middleIndex - 1]) / 2.0; |
| 176 | } |
| 177 | } |
| 178 | |
| 179 | double computeStandardDeviation(const std::vector<unsigned>& numbers) |
| 180 | { |