yohhoyの日記

技術的メモをしていきたい日記

飽和演算サポート @ C++26

C++2c(C++26)標準ライブラリに追加される飽和演算(saturation arithmetic)サポートについてメモ。

2026-04-22追記:2026年3月会合でP4052R0が採択され、関数名称の変更op_satsaturating_op, saturate_castsaturating_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