最終更新日時:
が更新

履歴 編集

function template
<simd>

std::simd::clamp(C++26)

namespace std::simd {
  template<class T, class Abi>
  constexpr basic_vec<T, Abi>
    clamp(const basic_vec<T, Abi>& v,
          const basic_vec<T, Abi>& lo,
          const basic_vec<T, Abi>& hi);  // C++26
}

概要

clampは、basic_vecの各要素を、要素ごとに指定した範囲[lo, hi]に収める関数である。各要素がloより小さければloに、hiより大きければhiに切り詰められる。

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

事前条件

  • loのどの要素も、hiの対応する要素より大きくないこと

戻り値

i番目の要素がclamp(v[i], lo[i], hi[i])となるbasic_vec

例外

投げない

#include <simd>
#include <print>

namespace simd = std::simd;

int main()
{
  simd::vec<int, 4> v([](int i) { return i * 2; });  // {0, 2, 4, 6}
  simd::vec<int, 4> lo = 1;                          // {1, 1, 1, 1}
  simd::vec<int, 4> hi = 5;                          // {5, 5, 5, 5}

  // 各要素を範囲[1, 5]に収める
  auto r = simd::clamp(v, lo, hi);  // {1, 2, 4, 5}

  for (int i = 0; i < r.size(); ++i)
    std::print("{} ", r[i]);
  std::println("");
}

出力

1 2 4 5 

バージョン

言語

  • C++26

処理系

関連項目

参照