C++2c(C++26)標準ライブラリに追加される飽和演算(saturation arithmetic)サポートについてメモ。
2026-04-22追記:2026年3月会合でP4052R0が採択され、関数名称の変更op_sat→saturating_op, saturate_cast→saturating_castが行われた。
// C++2c <numeric>ヘッダ (P4052R0) namespace std { // T,U = 符号付き整数型 or 符号無し整数型 template<class T> constexpr T saturating_add(T x, T y) noexcept; template<class T> constexpr T saturating_sub(T x, T y) noexcept; template<class T> constexpr T saturating_mul(T x, T y) noexcept; template<class T> constexpr T saturating_div(T x, T y) noexcept; template<class T, class U> constexpr T saturating_cast(U x) noexcept; }
| 関数 | 効果 |
|---|---|
saturating_add(x,y) |
飽和加算(x + y) |
saturating_sub(x,y) |
飽和減算(x - y) |
saturating_mul(x,y) |
飽和乗算(x * y) |
saturating_div(x,y) |
飽和除算(x / y) |
saturating_cast<T>(x) |
型キャスト飽和演算 |
メモ:信号処理分野では飽和演算が多用されるため、例えばOpenCVライブラリでは型キャスト飽和演算cv::saturate_cast<T>(x)が提供される。C++2c標準ライブラリ版はOpenCV版とは異なり、浮動小数点数からの型変換をサポートしない。*1
関連URL