std:: pow (std::valarray)
|
Défini dans l'en-tête
<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) | |
|
template
<
class
T
>
std::
valarray
<
T
>
pow
(
const
typename
std::
valarray
<
T
>
::
value_type
&
vbase,
|
(3) | |
Élève une valeur à une puissance.
Le comportement est indéfini si base. size ( ) ! = exp. size ( ) .
Table des matières |
Paramètres
| base | - | tableau numérique contenant les valeurs de la base |
| exp | - | tableau numérique contenant les valeurs de l'exposant |
| vbase | - | une valeur définissant la base |
| vexp | - | une valeur définissant l'exposant |
Valeur de retour
Un tableau numérique contenant les résultats de l'exponentiation.
Notes
La fonction non qualifiée ( pow ) est utilisée pour effectuer le calcul. Si une telle fonction n'est pas disponible, std:: pow est utilisée en raison de la recherche dépendante des arguments .
La fonction peut être implémentée avec un type de retour différent de std::valarray . Dans ce cas, le type de remplacement possède les propriétés suivantes :
-
- Toutes les fonctions membres const de std::valarray sont fournies.
- std::valarray , std::slice_array , std::gslice_array , std::mask_array et std::indirect_array peuvent être construits à partir du type de remplacement.
- Pour chaque fonction prenant un const std:: valarray < T > & sauf begin() et end() (depuis C++11) , des fonctions identiques prenant les types de remplacement doivent être ajoutées ;
- Pour chaque fonction prenant deux arguments const std:: valarray < T > & , des fonctions identiques prenant toutes les combinaisons de const std:: valarray < T > & et des types de remplacement doivent être ajoutées.
- Le type de retour n'ajoute pas plus de deux niveaux d'imbrication de templates par rapport au type d'argument le plus profondément imbriqué.
Exemple
#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.exposants.size()) os << sup[r.exposants[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}; }
Sortie :
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
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3074 | C++98 |
T
est déduit à la fois du scalaire et du
valarray
pour
(2,3)
, empêchant les appels de types mixtes
|
déduire uniquement
T
à partir du
valarray
|
Voir aussi
|
applique la fonction
std::sqrt
à chaque élément du valarray
(modèle de fonction) |
|
|
(C++11)
(C++11)
|
élève un nombre à la puissance donnée (
x
y
)
(fonction) |
|
puissance complexe, un ou les deux arguments peuvent être un nombre complexe
(modèle de fonction) |