std::pow(std::valarray)
Источник: ru.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>&аргумента, должны быть добавлены идентичные функции, принимающие любую комбинацию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.базы.size(); ++n) { os << std::left << r.базы[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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3074 | C++98 |
T
выводится как из скаляра, так и из
valarray
для
(2,3)
, запрещая вызовы со смешанными типами
|
выводить
T
только из
valarray
|
Смотрите также
|
применяет функцию
std::sqrt
к каждому элементу valarray
(шаблон функции) |
|
|
(C++11)
(C++11)
|
возводит число в заданную степень (
x
y
)
(функция) |
|
комплексное возведение в степень, один или оба аргумента могут быть комплексными числами
(шаблон функции) |