[libcxx-commits] [libcxx] 715567d - [libc++] simplify the midpoint function (#81717)
via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Feb 17 07:56:05 PST 2024
Author: rilysh
Date: 2024-02-17T16:56:02+01:00
New Revision: 715567d03771c437e26b16fbc71c30c4474b8895
URL: https://github.com/llvm/llvm-project/commit/715567d03771c437e26b16fbc71c30c4474b8895
DIFF: https://github.com/llvm/llvm-project/commit/715567d03771c437e26b16fbc71c30c4474b8895.diff
LOG: [libc++] simplify the midpoint function (#81717)
Right now we've a nested ternary for the midpoint function, but this can
be simplified a bit more, using if statements. This also slightly
increases the readability of that function.
Added:
Modified:
libcxx/include/__numeric/midpoint.h
Removed:
################################################################################
diff --git a/libcxx/include/__numeric/midpoint.h b/libcxx/include/__numeric/midpoint.h
index 5d715c21d8eaca7..5ef30d4ec50f5ad 100644
--- a/libcxx/include/__numeric/midpoint.h
+++ b/libcxx/include/__numeric/midpoint.h
@@ -67,14 +67,16 @@ template <class _Fp>
_LIBCPP_HIDE_FROM_ABI constexpr enable_if_t<is_floating_point_v<_Fp>, _Fp> midpoint(_Fp __a, _Fp __b) noexcept {
constexpr _Fp __lo = numeric_limits<_Fp>::min() * 2;
constexpr _Fp __hi = numeric_limits<_Fp>::max() / 2;
- return std::__fp_abs(__a) <= __hi && std::__fp_abs(__b) <= __hi
- ? // typical case: overflow is impossible
- (__a + __b) / 2
- : // always correctly rounded
- std::__fp_abs(__a) < __lo ? __a + __b / 2 : // not safe to halve a
- std::__fp_abs(__b) < __lo ? __a / 2 + __b
- : // not safe to halve b
- __a / 2 + __b / 2; // otherwise correctly rounded
+
+ // typical case: overflow is impossible
+ if (std::__fp_abs(__a) <= __hi && std::__fp_abs(__b) <= __hi)
+ return (__a + __b) / 2; // always correctly rounded
+ if (std::__fp_abs(__a) < __lo)
+ return __a + __b / 2; // not safe to halve a
+ if (std::__fp_abs(__b) < __lo)
+ return __a / 2 + __b; // not safe to halve b
+
+ return __a / 2 + __b / 2; // otherwise correctly rounded
}
#endif // _LIBCPP_STD_VER >= 20
More information about the libcxx-commits
mailing list