Namespaces
Variants

std::pow(std::valarray)

cppreference.net에서
 
 
 
 
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 - base 값을 포함하는 숫자 배열
exp - exponent 값을 포함하는 숫자 배열
vbase - base를 정의하는 값
vexp - exponent를 정의하는 값

반환값

지수 연산 결과를 포함하는 숫자 배열.

참고

비한정 함수(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>& 인수를 받는 함수에 대해, 모든 조합을 받는 동일한 함수가 const std::valarray<T>& 및 대체 형식이 추가되어야 합니다.
  • 반환 형식은 가장 깊게 중첩된 인수 형식보다 두 단계 이상의 템플릿 중첩을 추가하지 않습니다.

예제

#include <cmath>
#include <cstddef>
#include <iomanip>
#include <iostream>
#include <valarray>
class show
{
    friend std::ostream& operator<<(std::ostream& 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
(설명: HTML 태그와 속성은 그대로 유지되었으며, C++ 관련 용어인 `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 )
(함수)
복소수 거듭제곱, 하나 또는 두 인수가 복소수일 수 있음
(함수 템플릿)