• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function template
    <numeric>

    std::mul_sat

    namespace std {
      template<class T>
        constexpr T mul_sat(T x, T y) noexcept;
    }
    

    概要

    飽和乗算 x * y を計算する。

    テンプレートパラメータ制約

    Tは符号付き整数型または符号無し整数型であること。

    戻り値

    • 無限の範囲で計算した値x * yが型Tで表現可能ならば、x * yを返す
    • そうでないとき、型Tで表現可能な最大値または最小値のうちx * yに近い方の値を返す

    例外

    投げない

    #include <cstdint>
    #include <numeric>
    #include <print>
    
    int main()
    {
      // 2 * 3 = 6
      std::println("{}", std::mul_sat(2, 3));
    
      // 20 * 20 = 400 -> 255(2**8-1)
      std::uint8_t n = 20;
      std::println("{}", std::mul_sat(n, n));
    
      // -128 * -1 = 128 -> 127(2**7-1)
      std::int8_t x = -128, y = -1;
      std::println("{}", std::mul_sat(x, y));
    }
    

    出力

    6
    255
    127
    

    バージョン

    言語

    • C++26

    処理系

    参照