Common mathematical functions | |||||||||||||||||||||||||||||||
Mathematical special functions(C++17) | |||||||||||||||||||||||||||||||
Mathematical constants(C++20) | |||||||||||||||||||||||||||||||
Basic linear algebra algorithms(C++26) | |||||||||||||||||||||||||||||||
Data-parallel types (SIMD)(C++26) | |||||||||||||||||||||||||||||||
Floating-point environment(C++11) | |||||||||||||||||||||||||||||||
Complex numbers | |||||||||||||||||||||||||||||||
Numeric array (valarray ) | |||||||||||||||||||||||||||||||
Pseudo-random number generation | |||||||||||||||||||||||||||||||
Bit manipulation(C++20) | |||||||||||||||||||||||||||||||
Saturation arithmetic(C++26) | |||||||||||||||||||||||||||||||
Factor operations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Interpolations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Generic numeric operations | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
C-style checked integer arithmetic | |||||||||||||||||||||||||||||||
|
Functions | ||||
(C++26) | ||||
(C++26) | ||||
(C++26) | ||||
div_sat (C++26) | ||||
(C++26) |
Defined in header <numeric> | ||
template<class T> constexpr T div_sat( T x, T y)noexcept; | (since C++26) | |
Computes thesaturating divisionx/ y. IfT
is a signed integer type,x is the smallest (most negative) value ofT
, andy==-1, returns the greatest value ofT
; otherwise, returnsx/ y.
y must not be0, otherwise the behavior is undefined. The function call is not acore constant expression if undefined behavior happens.
This overload participates in overload resolution only ifT
is aninteger type, that is:signedchar,short,int,long,longlong, an extended signed integer type, or an unsigned version of such types. In particular,T
must not be (possibly cv-qualified)bool,char,wchar_t,char8_t,char16_t, andchar32_t, as these types are not intended for arithmetic.
Contents |
x, y | - | integer values |
Saturatedx/ y.
Unlike the built-in arithmetic operators on integers, theintegral promotion does not apply to thex andy arguments.
If two arguments of different type are passed, the call fails to compile, i.e. the behavior relative totemplate argument deduction is the same as forstd::min orstd::max.
Most modern hardware architectures have efficient support for saturation arithmetic onSIMD vectors, includingSSE2 forx86 andNEON forARM.
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_saturation_arithmetic | 202311L | (C++26) | Saturation arithmetic |
namespace detail{template<class T>concept standard_or_extended_integral=std::is_integral_v<T>&&!std::is_same_v<std::remove_cv_t<T>,bool>&&!std::is_same_v<std::remove_cv_t<T>,char>&&!std::is_same_v<std::remove_cv_t<T>, char8_t>&&!std::is_same_v<std::remove_cv_t<T>,char16_t>&&!std::is_same_v<std::remove_cv_t<T>,char32_t>&&!std::is_same_v<std::remove_cv_t<T>,wchar_t>;}// namespace detail template<detail::standard_or_extended_integral T>constexpr T div_sat( T x, T y)noexcept{ifconstexpr(std::is_signed_v<T>)if(x==std::numeric_limits<T>::min()&& y==-1)returnstd::numeric_limits<T>::max();return x/ y;} |
Can be previewed onCompiler Explorer.
(C++26) | saturating addition operation on two integers (function template)[edit] |
(C++26) | saturating subtraction operation on two integers (function template)[edit] |
(C++26) | saturating multiplication operation on two integers (function template)[edit] |
(C++26) | returns an integer value clamped to the range of another integer type (function template)[edit] |
(C++17) | clamps a value between a pair of boundary values (function template)[edit] |
(C++20) | checks if an integer value is in the range of a given integer type (function template)[edit] |
[static] | returns the smallest finite value of the given non-floating-point type, or the smallest positive normal value of the given floating-point type (public static member function of std::numeric_limits<T> )[edit] |
[static] | returns the largest finite value of the given type (public static member function of std::numeric_limits<T> )[edit] |
1. | A branch-free implementation of saturation arithmetic — Locklessinc.com, 2012 |
2. | C++ Weekly - Ep 459 - C++26's Saturating Math Operations — Youtube.com, 2024-12-16 |