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

履歴 編集

function template
<linalg>

std::linalg::dot(C++26)

namespace std::linalg {
  template<in-vector InVec1,
           in-vector InVec2,
           class Scalar>
  Scalar dot(InVec1 v1,
             InVec2 v2,
             Scalar init); // (1)

  template<class ExecutionPolicy,
           in-vector InVec1,
           in-vector InVec2,
           class Scalar>
  Scalar dot(ExecutionPolicy&& exec,
             InVec1 v1,
             InVec2 v2,
             Scalar init); // (2)

  template<in-vector InVec1,
           in-vector InVec2>
  auto dot(InVec1 v1,
           InVec2 v2); // (3)

  template<class ExecutionPolicy,
           in-vector InVec1,
           in-vector InVec2>
  auto dot(ExecutionPolicy&& exec,
           InVec1 v1,
           InVec2 v2); // (4)
}

概要

2つのベクトルv1v2の内積を計算する。

適格要件

事前条件

2つのベクトルの次元が同じであること。

  • v1.extent(0) == v2.extent(0)

効果

  • (1), (2): なし
  • (3), (4): Tを各ベクトルの値型の積の型decltype(declval<typename InVec1::value_type>() * declval<typename InVec2::value_type>())とする。
    • (3): dot(v1, v2, T{})を返す。
    • (4): dot(std::forward<ExecutionPolicy>(exec), v1, v2, T{})を返す。

戻り値

2つのベクトルの次元をNとする。

  • (1): もしNが0ならinitを返す。そうでない場合は、共役を取らない内積、つまり以下の式のScalar型の値を返す。

$$ \verb|init| + \sum_{i = 0}^{N - 1} \verb|v1|[i] * \verb|v2|[i] $$

  • (2): (1)の並列アルゴリズム版。
  • (3): (1)のinitを和の各項の型のデフォルト値に置き換えて計算する。
  • (4): (3)の並列アルゴリズム版。

備考

  • (1), (2): もしInVec1::value_typeInVec2::value_typeScalarが全て浮動小数点数型またはstd::complexの特殊化で、ScalarInVec1::value_typeInVec2::value_typeより精度が高い場合、和の各項はScalarまたはより高い精度の型が使われる。

出力

バージョン

言語

  • C++26

処理系

関連項目

参照