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

履歴 編集

function template
<numeric>

std::mul_sat(C++26)

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

処理系

参照