table of contents
std::pow(std::valarray)(3) | C++ Standard Libary | std::pow(std::valarray)(3) |
NAME¶
std::pow(std::valarray) - std::pow(std::valarray)
Synopsis¶
Defined in header <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,
(2)
const typename std::valarray<T>::value_type& vexp );
template< class T >
std::valarray<T> pow( const typename
std::valarray<T>::value_type& vbase, (3)
const std::valarray<T>& exp );
Raises a value to a power.
1) Computes the values of each element in the numeric array base raised to
the power
specified by the corresponding element from the numeric array exp.
The behavior is undefined if base.size() != exp.size().
2) Computes the values of each element in the numeric array base raised to
the power
vexp.
3) Computes the values of vbase raised to the power defined by the elements
in the
numeric array exp.
Parameters¶
base - numeric array containing the values of the base
exp - numeric array containing the values of the exponent
vbase - a value defining the base
vexp - a value defining the exponent
Return value¶
A numeric array containing the results of exponentiation.
Notes¶
Unqualified function (pow) is used to perform the computation. If
such function is
not available, std::pow is used due to argument-dependent lookup.
The function can be implemented with the return type different from
std::valarray.
In this case, the replacement type has the following properties:
* All const member functions of std::valarray are provided.
* std::valarray, std::slice_array, std::gslice_array, std::mask_array and
std::indirect_array can be constructed from the replacement type.
* For every function taking a const std::valarray<T>&
except begin() and end()
(since C++11), identical functions taking the replacement types shall
be added;
* For every function taking two const std::valarray<T>& arguments,
identical
functions taking every combination of const std::valarray<T>& and
replacement
types shall be added.
* The return type does not add more than two levels of template nesting over
the
most deeply-nested argument type.
Example¶
// Run this code
#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.exponents.size())
os << sup[r.exponents[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};
}
Output:¶
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
Defect reports
The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.
DR Applied to Behavior as published Correct behavior
T is deduced from both the scalar and the only deduce T from the
LWG 3074 C++98 valarray for (2,3), disallowing valarray
mixed-type calls
See also¶
sqrt(std::valarray) applies the function std::sqrt to each
element of valarray
(function template)
pow
powf raises a number to the given power (\(\small{x^y}\)x^y)
powl (function)
(C++11)
(C++11)
pow(std::complex) complex power, one or both arguments may be a complex
number
(function template)
Hidden category:¶
* Pages with unreviewed LWG DR marker
2024.06.10 | http://cppreference.com |