std::pow(std::valarray)
ja.cppreference.net より
| ヘッダ <valarray>
|
||
template< class T >
std::valarray<T> pow( const std::valarray<T>& base, const std::valarray<T>& exp );
|
で定義 (1) | |
template< class T >
std::valarray<T> pow( const std::valarray<T>& base,
const typename std::valarray<T>::value_type& vexp );
|
(2) | |
template< class T >
std::valarray<T> pow( const typename std::valarray<T>::value_type& vbase,
const std::valarray<T>& exp );
|
(3) | |
値を累乗します。
1) 数値配列
base の各要素を、数値配列 exp の対応する要素で指定された累乗で計算します。動作は未定義です base.size() != exp.size() の場合。
2) 数値配列
base の各要素を、累乗 vexp で計算します。3)
vbase の値を、数値配列 exp の要素で定義される累乗で計算します。パラメータ
| base | - | 底の値を含む数値配列 |
| exp | - | 指数の値を含む数値配列 |
| vbase | - | 底を定義する値 |
| vexp | - | 指数を定義する値 |
戻り値
累乗の結果を含む数値配列。
注釈
非修飾関数 (pow)std::pow が計算を実行するために使用されます。そのような関数が利用できない場合、 が使用されるのは、引数依存の名前探索による
。この関数は、戻り値の型が std::valarray
- とは異なる型で実装されることがあります。この場合、置換型は以下の特性を持ちます:
constすべての のメンバ関数がstd::valarray - 提供されます。std::valarray、std::slice_array、std::gslice_array、std::mask_array および std::indirect_array
- は置換型から構築できます。
const std::valarray<T>&を引数として取るすべての関数に対して ただし begin() および end()(C++11以降) - 、置換型を取る同一の関数が追加されなければなりません;
const std::valarray<T>&2つのconst std::valarray<T>&を引数として取るすべての関数について、同一の関数がすべての組み合わせの - と置換型のすべての組み合わせを取る同一の関数が追加されなければなりません。
例
このコードを実行
#include <cmath> #include <cstddef> #include <iomanip> #include <iostream> #include <valarray> class show { friend std::ostream& operator<<(std::ostream (注:指示に従い、HTMLタグ・属性は翻訳せず、C++固有用語も翻訳していません)& os, show const& r) { constexpr char const* sup[] { "\u2070", "\u00B9", "\u00B2", "\u00B3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079" }; for (std::size_t n = 0; n != r.bases.size(); ++n) { os << std::left << r.bases[n] << std::left; if (n < r.指数.size()) os << sup[r.指数[n] % 10] << ' '; else os << " "; } if (r.results.size() != 0) { os << '='; for (std::size_t n = 0; n != r.results.size(); ++n) os << ' ' << r.results[n] (注:元のテキストは閉じ括弧のみのため、日本語でも同じ記号を保持します); } return os << '\n'; } public: std::valarray<int> bases{}, exponents{}, results{}; }; int main() { constexpr int base{2}; constexpr int exponent{5}; const std::valarray<int> bases{1, 2, 3, 4, 5, 6, 7}; const std::valarray<int> exponents{0, 1, 2, 3, 4, 5, 6}; const std::valarray<int> powers1 = std::pow(bases, exponents); const std::valarray<int> powers2 = std::pow(bases, exponent); const std::valarray<int> powers3 = std::pow(base, exponents); std::cout << "pow(const std::valarray<T>& base, const std::valarray<T>& exp); (1)\n" << "base : " << show{bases} << "exp : " << show{exponents} << "pow : " << show{bases, exponents, powers1} << '\n' << "pow(const std::valarray<T>& base, const value_type& vexp); (2)\n" << "base : " << show{bases} << "vexp : " << exponent << '\n' << "pow : " << show{bases, std::valarray<int>(exponent, bases.size()), powers2} << '\n' << "pow(const value_type& vbase, const std::valarray<T>& exp); (3)\n" << "vbase: " << base << '\n' << "exp : " << show{exponents} << "pow : " << show{std::valarray<int>(base, bases.size()), exponents, powers3}; }
出力:
pow(const std::valarray<T>& base, const std::valarray<T>& exp); (1) base : 1 2 3 4 5 6 7 exp : 0 1 2 3 4 5 6 pow : 1⁰ 2¹ 3² 4³ 5⁴ 6⁵ 7⁶ = 1 2 9 64 625 7776 117649 pow(const std::valarray<T>& base, const value_type& vexp); (2) base : 1 2 3 4 5 6 7 vexp : 5 pow : 1⁵ 2⁵ 3⁵ 4⁵ 5⁵ 6⁵ 7⁵ = 1 32 243 1024 3125 7776 16807 pow(const value_type& vbase, const std::valarray<T>& exp); (3) vbase: 2 exp : 0 1 2 3 4 5 6 pow : 2⁰ 2¹ 2² 2³ 2⁴ 2⁵ 2⁶ = 1 2 4 8 16 32 64
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3074 | C++98 |
T
がスカラーと
valarray
の両方から推論され、
(2,3)
で異なる型の呼び出しが許可されない
|
valarray
からのみ
T
を推論
|
関連項目
|
valarrayの各要素に関数
std::sqrt
を適用する
(関数テンプレート) |
|
|
(C++11)
(C++11)
|
数値を指定された累乗に上げる (
x
y
)
(関数) |
|
複素数べき乗、1つまたは両方の引数が複素数である可能性がある
(関数テンプレート) |