Namespaces
Variants

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 const funciones 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 de const 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

#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)