Daily bit(e) of C++ #194, Утилита C++20 для вычисления средней точки между двумя арифметическими типами или указателями: std::midpoint.
Вычисление среднего значения между двумя арифметическими типами или указателями может показаться тривиальным; однако, когда значения близки к числовым пределам или не соответствуют порядку, тривиальные реализации могут легко столкнуться с неопределенностью поведения.
C++20 представил std::midpoint, обеспечивающий безопасную реализацию.
#include <numeric> auto m1 = std::midpoint(std::numeric_limits<int>::max(), std::numeric_limits<int>::max()-2); // m1 == std::numeric_limits<int>::max()-1 int data[]={5, 9, 2, 3, 1, 8, 4, 6, 7}; auto m2 = std::midpoint(data, data+9); // *m2 == 1 auto m3 = std::midpoint(3.2, 7.6); // m3 ~= 5.4