Функция midpoint
Функция midpoint из заголовка <cmath>
вычисляет среднюю точку между двумя числами. В первый
параметр мы передаём первое число, а во второй -
второе число. Функция возвращает значение, лежащее
ровно посередине между ними. Главное преимущество
midpoint перед выражением (a + b) / 2
заключается в том, что она не вызывает переполнения
при сложении больших чисел и корректно работает
с числами разных знаков.
Функция появилась в стандарте C++20 и доступна
для типов int, long, long long,
unsigned, а также для чисел с плавающей точкой
float, double и long double.
Синтаксис
std::midpoint(a, b)
Пример
Давайте найдём середину между числами 10
и 20:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int res = midpoint(10, 20);
cout << res << endl;
return 0;
}
Результат выполнения кода:
15
Пример
Давайте найдём середину между числами с плавающей
точкой 1.5 и 4.5:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double res = midpoint(1.5, 4.5);
cout << res << endl;
return 0;
}
Результат выполнения кода:
3
Пример
Давайте найдём середину между числами разных знаков
-10 и 10:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int res = midpoint(-10, 10);
cout << res << endl;
return 0;
}
Результат выполнения кода:
0
Пример
Давайте убедимся, что midpoint не вызывает
переполнения там, где обычное сложение дало бы
неверный результат. Возьмём два больших числа:
#include <iostream>
#include <cmath>
#include <climits>
using namespace std;
int main()
{
int a = INT_MAX;
int b = INT_MAX;
int res = midpoint(a, b);
cout << res << endl;
return 0;
}
Результат выполнения кода:
2147483647