最終更新日時:
が更新

履歴 編集

function
<simd>

std::simd::basic_vec::imag(C++26)

constexpr real-type imag() const noexcept;        // (1) C++26

constexpr void imag(const real-type& v) noexcept; // (2) C++26

概要

複素数要素型の虚部を取得/設定する。

  • (1) : 各要素の虚部を集めたデータ並列型を取得する。
  • (2) : 各要素の虚部をvの対応する要素で置き換える。

real-typeは、要素型Tstd::complex<U>のとき、要素型をUに置き換えたbasic_vecである。

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

  • (1), (2) : basic_vecが複素数のデータ並列型(simd-complex)であること。

効果

  • (2) : すべてのi0以上size()未満)について、第i要素をvalue_type((*this)[i].real(), v[i])で置き換える。

戻り値

  • (1) : 第i要素を(*this)[i].imag()とするデータ並列型。

例外

投げない

#include <simd>
#include <complex>
#include <print>

namespace simd = std::simd;

template <class V>
void print(const char* name, const V& v)
{
  std::print("{}: ", name);
  for (int i = 0; i < v.size(); ++i) {
    std::print("{} ", v[i]);
  }
  std::println("");
}

int main()
{
  simd::vec<float, 4> reals([](int i) { return float(i + 1); });        // {1, 2, 3, 4}
  simd::vec<float, 4> imags([](int i) { return float((i + 1) * 10); }); // {10, 20, 30, 40}

  // 実部と虚部からcomplexのデータ並列型を構築する
  simd::vec<std::complex<float>, 4> v{reals, imags};

  // 虚部を取得する
  ::print("imag", v.imag());

  // 虚部を設定する
  v.imag(simd::vec<float, 4>(0.0f));
  ::print("real", v.real());
  ::print("imag", v.imag());
}

出力

imag: 10 20 30 40 
real: 1 2 3 4 
imag: 0 0 0 0 

バージョン

言語

  • C++26

処理系

関連項目

参照