std::pow(std::valarray)
De es.cppreference.net
| Definido en el encabezado <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) | |
Eleva un valor a una potencia.
1) Calcula los valores de cada elemento en el arreglo numérico
base elevado a la potencia especificada por el elemento correspondiente del arreglo numérico exp.El comportamiento no está definido si base.size() != exp.size().
2) Calcula los valores de cada elemento en el arreglo numérico
base elevado a la potencia vexp.3) Calcula los valores de
vbase elevado a la potencia definida por los elementos en el arreglo numérico exp.Parámetros
| base | - | array numérico que contiene los valores de la base |
| exp | - | array numérico que contiene los valores del exponente |
| vbase | - | un valor que define la base |
| vexp | - | un valor que define el exponente |
Valor de retorno
Un arreglo numérico que contiene los resultados de la exponenciación.
Notas
Se utiliza la función no calificada (pow) para realizar el cálculo. Si dicha función no está disponible, se utiliza std::pow debido a la búsqueda dependiente de argumentos.
La función se puede implementar con un tipo de retorno diferente de std::valarray. En este caso, el tipo de reemplazo tiene las siguientes propiedades:
- Todas las
constfunciones miembro de std::valarray se proporcionan. - std::valarray, std::slice_array, std::gslice_array, std::mask_array y std::indirect_array se pueden construir a partir del tipo de reemplazo.
- Para cada función que toma un
const std::valarray<T>&excepto begin() y end()(desde C++11), se añadirán funciones idénticas que tomen los tipos de reemplazo; - Para cada función que toma dos argumentos
const std::valarray<T>&, se añadirán funciones idénticas que tomen cada combinación deconst std::valarray<T>&y tipos de reemplazo. - El tipo de retorno no añade más de dos niveles de anidamiento de plantillas sobre el tipo de argumento más profundamente anidado.
Ejemplo
Ejecutar este código
#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; if (n < r.exponentes.size()) os << sup[r.exponentes[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}; }
Salida:
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
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3074 | C++98 |
T
se deduce tanto del escalar como del
valarray
para
(2,3)
, impidiendo llamadas de tipos mixtos
|
deducir únicamente
T
del
valarray
|
Véase también
|
aplica la función
std::sqrt
a cada elemento del valarray
(plantilla de función) |
|
|
(C++11)
(C++11)
|
eleva un número a la potencia dada (
x
y
)
(función) |
|
potencia compleja, uno o ambos argumentos pueden ser números complejos
(plantilla de función) |