Namespaces
Variants

std:: pow (std::valarray)

From 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とexpのサイズが異なる場合、動作は未定義です。 base. size ( ) ! = exp. size ( ) .

2) 数値配列 base の各要素を vexp 乗した値を計算します。
3) 数値配列 exp の要素で定義される指数に対する vbase のべき乗値を計算します。

目次

パラメータ

base - 底の値を含む数値配列
exp - 指数の値を含む数値配列
vbase - 底を定義する値
vexp - 指数を定義する値

戻り値

累乗の結果を含む数値配列。

注記

修飾されていない関数 ( pow ) が計算を実行するために使用されます。そのような関数が利用できない場合、 std:: pow 実引数依存の名前探索 によって使用されます。

この関数は、戻り値の型が std::valarray と異なる型で実装される場合があります。この場合、置換型は以下の特性を持ちます:

#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つまたは両方の引数が複素数である可能性がある
(関数テンプレート)