Why is this an issue?
C++20 introduced the standard algorithms to compute the midpoint between two values and linear interpolation for a given coefficient.
std::midpoint(a, b) computes the midpoint, or average, or arithmetic mean of two values
(a+b)/2. The result is half-way from
b, and if
b are pointers it points to
the middle of a contiguous memory segment between the two. A naive midpoint computation might suffer from a possible overflow or be inefficient.
That’s why in most cases
std::midpoint is preferable.
std::lerp(a, b, t) returns linear interpolation between values
b with a coefficient
t is between 0 and 1.
This rule reports computations that should be replaced with
Noncompliant code example
auto avg1 = (a + b)/2; // Noncompliant, might overflow
auto avg2 = a + (b - a)/2; // Noncompliant
auto third = a + (b - a)*0.3f; // Noncompliant
auto avg1 = std::midpoint(a, b);
auto avg2 = std::midpoint(a, b);
auto third = std::lerp(a, b, 0.3f);