web-dev-qa-db-fra.com

Quelle est la fonction C ++ pour élever un nombre à une puissance?

Comment puis-je augmenter un nombre à une puissance?

2^1

2^2

2^3

etc...

105
user98188

pow () dans la bibliothèque cmath. Plus d'infos ici . N'oubliez pas de mettre #include<cmath> en haut du fichier.

126
Joey Robert

std::pow dans l'en-tête <cmath> présente les surcharges suivantes:

pow(float, float);
pow(float, int);
pow(double, double); // taken over from C
pow(double, int);
pow(long double, long double);
pow(long double, int);

Maintenant, vous ne pouvez pas faire

pow(2, N)

avec N étant un int, car il ne sait pas quelle version de float, double, ou long double il devrait prendre, et vous obtiendrez une erreur d’ambiguïté. Tous les trois auraient besoin d'une conversion d'Int en virgule flottante, et tous les trois sont également coûteux!

Par conséquent, assurez-vous de taper le premier argument pour qu'il corresponde parfaitement à l'un de ces trois arguments. J'utilise habituellement double

pow(2.0, N)

Un avocat merde de moi encore. Je suis souvent tombé moi-même dans ce piège, alors je vais vous en avertir.

89

En C++, l'opérateur "^" est un OU au niveau des bits. Cela ne fonctionne pas pour élever au pouvoir. Le x << n est un décalage à gauche du nombre binaire qui équivaut à multiplier x par 2 n nombre de fois et qui ne peut être utilisé que lors de la montée de 2 à une puissance. La fonction de prisonnier de guerre est une fonction mathématique qui fonctionnera de manière générique.

19
Cindy

Utilisez la fonction pow (x, y): voir ici

Incluez simplement math.h et vous êtes tous ensemble.

14
Adam Haile

Vous devriez pouvoir utiliser les méthodes C normales en maths.

#include <cmath>

pow(2,3)

si vous êtes sur un système semblable à Unix, man cmath

Est-ce ce que vous demandez?

Sujal

13
sujal

Bien que pow( base, exp ) soit une excellente suggestion, sachez que cela fonctionne généralement en virgule flottante.

Cela peut être ou ne pas être ce que vous voulez: sur certains systèmes, une simple boucle se multipliant sur un accumulateur sera plus rapide pour les types entiers.

Et pour square spécifiquement, vous pourriez aussi bien multiplier les nombres vous-même, en virgule flottante ou en entier; ce n'est pas vraiment une diminution de la lisibilité (IMHO) et vous évitez la surcharge de performance d'un appel de fonction.

11
leander

Je n'ai pas assez de réputation pour commenter, mais si vous aimez travailler avec QT, ils ont leur propre version.

    #include <QtCore/qmath.h>
    qPow(x, y); // returns x raised to the y power.

Ou si vous n'utilisez pas QT, cmath a fondamentalement la même chose.

    #include <cmath>
    double x = 5, y = 7; //As an example, 5 ^ 7 = 78125
    pow(x, y); //Should return this: 78125
9
Agricola
#include <iostream>
#include <conio.h>

using namespace std;

double raiseToPow(double ,int) //raiseToPow variable of type double which takes arguments (double, int)

void main()
{
    double x; //initializing the variable x and i 
    int i;
    cout<<"please enter the number"; 
    cin>>x;
    cout<<"plese enter the integer power that you want this number raised to";
    cin>>i;
    cout<<x<<"raise to power"<<i<<"is equal to"<<raiseToPow(x,i);
}

// définition de la fonction raiseToPower

double raiseToPow(double x, int power)
{
    double result;
    int i;
    result =1.0;
    for (i=1, i<=power;i++)
    {
        result = result*x;
    }
    return(result);
}
6
Filza Naser

C'est pow ou powf dans <math.h>

Il n'y a pas d'opérateur d'infixe spécial comme dans Visual Basic ou Python

5
Dario

Beaucoup de réponses ont suggéré pow() ou des alternatives similaires ou leurs propres implémentations. Cependant, étant donné les exemples (2^1, 2^2 et 2^3) de votre question, je devinerais s'il vous suffit de lever 2 à une puissance entière. Si tel est le cas, je vous suggère d'utiliser 1 << n pour 2^n.

5
Jianchao Li
pow(2.0,1.0)
pow(2.0,2.0)
pow(2.0,3.0)

Le titre de votre question initiale est trompeur. Pour juste carré, utilisez 2*2.

4
Zifre

si vous voulez vous occuper de base_2 alors seulement, je vous recommande d'utiliser l'opérateur de décalage à gauche << à la place de bibliothèque mathématique.

exemple de code:

int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}

exemple de sortie:

1   2   4   8   16  32  64  128  256  512  1024  2048  4096  8192  16384  32768
4
HaSeeB MiR

Notez que l'utilisation de pow(x,y) est moins efficace que x*x*x y fois comme indiqué et que la réponse est donnée ici https://stackoverflow.com/a/2940800/319728 .

Donc, si vous visez l'efficacité, utilisez x*x*x.

3
aquraishi
int power (int i, int ow) // works only for ow >= 1
{ // but does not require <cmath> library!=)
    if (ow > 1)
    {
         i = i * power (i, ow - 1);
    }
    return i;
}

cout << power(6,7); //you can enter variables here
1
Viktor

J'utilise la bibliothèque cmath ou math.h pour utiliser les fonctions de la bibliothèque pow() qui gèrent les pouvoirs

#include<iostream>
#include<cmath>

int main()
{
    double number,power, result;
    cout<<"\nEnter the number to raise to power: ";
    cin>>number;
    cout<<"\nEnter the power to raise to: ";
    cin>>power;

    result = pow(number,power);

    cout<<"\n"<< number <<"^"<< power<<" = "<< result;

    return 0;
}
1
user8857051

Ajoutez d’abord #include <cmath> puis vous pouvez utiliser pow methode dans votre code, par exemple:

pow(3.5, 3);

Qui .5 est base et 3 est exp

0
Mohammad Ansari