¿Cómo elevo un número a una potencia?
2^1
2^2
2^3
etc ...
¿Cómo elevo un número a una potencia?
2^1
2^2
2^3
etc ...
Respuestas:
pow () en la biblioteca cmath. Más información aquí . No olvides ponerlo #include<cmath>
en la parte superior del archivo.
std::pow
en el <cmath>
encabezado tiene estas sobrecargas:
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);
Ahora no puedes simplemente hacer
pow(2, N)
siendo N un entero, porque no sabe cuál de float
, double
o long double
la versión que debe tomar, y se obtendría un error de ambigüedad. ¡Los tres necesitarían una conversión de int a coma flotante, y los tres son igualmente costosos!
Por lo tanto, asegúrese de escribir el primer argumento para que coincida perfectamente con uno de esos tres. Yo suelo usardouble
pow(2.0, N)
Algún abogado me ha vuelto a joder. A menudo me he caído en esta trampa, así que te voy a advertir sobre ello.
int N; pow(2.0, N)
todavía sería ambiguo:: could be 'pow(double,int)' or 'pow(double,double)'
- / → reparto
std::pow(2.0, 3)
.
pow(2, N)
es ambiguo desde C ++ 11, porque hay una función de plantilla que recibe cualquier tipo aritmético como parámetros.
En C ++, el operador "^" es un OR bit a bit. No funciona para elevar a un poder. La x << n es un desplazamiento a la izquierda del número binario que es lo mismo que multiplicar x por 2 n número de veces y que solo se puede usar al elevar 2 a una potencia. La función POW es una función matemática que funcionará genéricamente.
1 << n
es lo mismo que elevar 2 a la potencia n, o 2^n
.
1 << n
entendieron por qué el "1" en el comentario de @AshishAhuja, es porque la serie sigue así 1 << 0 = 1
desde entonces 2^0 = 1
; 1 << 1 = 2
puesto 2^1 = 2
; 1 << 2 = 4
desde entonces 2^2 = 4
y así sucesivamente ...
Use la función pow (x, y): ver aquí
Solo incluye math.h y estarás listo.
Si bien pow( base, exp )
es una gran sugerencia, tenga en cuenta que generalmente funciona en coma flotante.
Esto puede o no ser lo que desea: en algunos sistemas, un simple bucle que se multiplica en un acumulador será más rápido para los tipos enteros.
Y para el cuadrado específicamente, también podría multiplicar los números juntos, punto flotante o entero; en realidad no es una disminución de la legibilidad (en mi humilde opinión) y evita la sobrecarga de rendimiento de una llamada de función.
No tengo suficiente reputación para comentar, pero si te gusta trabajar con QT, tienen su propia versión.
#include <QtCore/qmath.h>
qPow(x, y); // returns x raised to the y power.
O si no estás usando QT, cmath tiene básicamente lo mismo.
#include <cmath>
double x = 5, y = 7; //As an example, 5 ^ 7 = 78125
pow(x, y); //Should return this: 78125
#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);
}
// definición de la función 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);
}
si solo desea tratar con base_2, le recomiendo usar el operador de desplazamiento a la izquierda << en lugar de la biblioteca matemática .
Código de muestra :
int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}
salida de muestra:
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
Muchas respuestas han sugerido pow()
alternativas similares o sus propias implementaciones. Sin embargo, dados los ejemplos ( 2^1
, 2^2
y 2^3
) en su pregunta, yo supongo si sólo es necesario para elevar 2
a una potencia entera. Si este es el caso, sugeriría que usted utilice 1 << n
para 2^n
.
Tenga en cuenta que el uso de pow(x,y)
es menos eficiente que x*x*x
y veces como se muestra y responde aquí https://stackoverflow.com/a/2940800/319728 .
Entonces, si vas por el uso eficiente x*x*x
.
Estoy usando la biblioteca cmath
o math.h
para hacer uso de las pow()
funciones de la biblioteca que se encargan de los poderes
#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;
}
Primero agregue, #include <cmath>
luego puede usar el pow
método en su código, por ejemplo:
pow(3.5, 3);
Cuál 3.5 es base y 3 es exp
use la función pow () en la biblioteca cmath, tgmath o math.h.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << pow(a,b) << endl; // this calculates a^b
return 0;
}
tenga en cuenta que si le da entrada al poder como cualquier tipo de datos que no sea el doble largo, entonces la respuesta se promoverá a la del doble. es decir, tomará entrada y dará salida como doble. para entradas dobles largas, el tipo de retorno es doble largo. para cambiar la respuesta a int use, int c = (int) pow (a, b)
Pero, tenga en cuenta que para algunos números esto puede resultar en un número menor que la respuesta correcta. así, por ejemplo, debe calcular 5 ^ 2, luego la respuesta puede devolverse como 24.99999999999 en algunos compiladores. al cambiar el tipo de datos a int, la respuesta será 24 en lugar de 25 la respuesta correcta. Entonces, haz esto
int c=(int)(pow(a,b)+0.5)
Ahora, tu respuesta será correcta. también, para números muy grandes, los datos se pierden al cambiar el tipo de datos doble a largo largo int. por ejemplo escribes
long long int c=(long long int)(pow(a,b)+0.5);
y dé la entrada a = 3 yb = 38, entonces el resultado será 1350851717672992000, mientras que la respuesta correcta es 1350851717672992089, esto sucede porque la función pow () devuelve 1.35085e + 18, que se promociona a int como 1350851717672992000. Sugiero escribir un función de potencia personalizada para tales escenarios, como: -
long long int __pow (long long int a, long long int b)
{
long long int q=1;
for (long long int i=0;i<=b-1;i++)
{
q=q*a;
}
return q;
}
y luego llamarlo cuando quieras,
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
Para números mayores que el rango de long long int, use boost library o strings.
__
están reservados, probablemente deberías elegir otra cosa.