Название вводило в заблуждение. Речь идет о полномочиях в целом, а не только о квадрате. Я отредактировал и исправил.
Zifre
31
Если вообще речь идет о степени двойки, используйте <<.
Thomas L Holaday
1
Да, это будет работать с целыми числами . , ,
imallett
3
В частности, целые числа ограниченного домена . Даже всего 2 ^ 70 приведет к переполнению целого числа (но число с плавающей запятой может представлять его точно )
Ponkadoodle
Ответы:
147
pow () в библиотеке cmath. Больше информации здесь . Не забудьте поставить #include<cmath>вверху файла.
pow(float,float);
pow(float,int);
pow(double,double);// taken over from C
pow(double,int);
pow(longdouble,longdouble);
pow(longdouble,int);
Теперь ты не можешь просто сделать
pow(2, N)
с N будучи ИНТ, потому что он не знает , какой из float, doubleили long doubleверсии он должен принять, и вы получите ошибку неоднозначности. Для всех трех потребуется преобразование из int в число с плавающей запятой, и все три одинаково дороги!
Поэтому убедитесь, что первый аргумент введен так, чтобы он идеально соответствовал одному из этих трех. Я обычно используюdouble
pow(2.0, N)
Снова какая-то адвокатская хрень. Я сам часто попадал в эту ловушку, поэтому хочу вас об этом предупредить.
int N; pow(2.0, N)все равно будет двусмысленно:: could be 'pow(double,int)' or 'pow(double,double)'- / → cast
Marvin
3
Рекомендую прочитать свой комментарий перед тем, как добавлять комментарий. ;-) Я объяснил, что это ДЕЙСТВИТЕЛЬНО дает двусмысленность. (Компилятор VS2008)
Марвин
1
@Marvin: Visual C ++ 2010 Express не имеет проблем с std::pow(2.0, 3).
Кейт Томпсон
5
@Marvin, поскольку со временем я стал более высокомерным, я собираюсь ответить еще раз: вы не сказали, что "... отклонено компилятором как двусмысленное ...", но вы сказали: "... все равно будет двусмысленно : ... ", для которого вы не предоставили поддержку. Намек на поведение компилятора может быть резервной копией, но если я показал независимо от компиляторов из первых принципов (самой спецификации), что это не двусмысленно, у меня есть более высокая позиция. Увы, в компиляторах C ++ могут быть ошибки.
Йоханнес Шауб - лит
1
Я думаю, что это тоже pow(2, N)однозначно, начиная с C ++ 11, потому что есть функция-шаблон, принимающая любой арифметический тип в качестве параметров.
Ale
29
В C ++ оператор «^» - это побитовое ИЛИ. Не работает для возведения в степень. X << n - это сдвиг двоичного числа влево, который совпадает с умножением x на 2 n раз и может использоваться только при возведении 2 в степень. Функция POW - это математическая функция, которая работает в общем случае.
В частности, 1 << nэто то же самое, что возведение 2 в степень n, или 2^n.
Ашиш
1
Для тех, кто не 1 << nпонял, почему "1" в комментарии @AshishAhuja, это потому, что 1 << 0 = 1с тех пор серия идет следующим образом 2^0 = 1; 1 << 1 = 2поскольку 2^1 = 2; 1 << 2 = 4с тех пор 2^2 = 4 и так далее ...
СП5
16
Вы должны уметь использовать в математике обычные методы C.
#include <cmath>
pow(2,3)
если вы используете unix-подобную систему, man cmath
Хотя pow( base, exp )это отличное предложение, имейте в виду, что он обычно работает с плавающей запятой.
Это может быть, а может и не быть тем, что вам нужно: в некоторых системах простой цикл умножения на аккумулятор будет быстрее для целочисленных типов.
И, в частности, для квадрата, вы могли бы просто перемножить числа вместе, с плавающей запятой или целым числом; это не совсем снижение читабельности (ИМХО), и вы избегаете накладных расходов на производительность при вызове функции.
И да, это может попасть в категорию «преждевременной оптимизации», но я всегда считаю полезным знать о таких вещах, особенно если вам приходится программировать в среде с ограниченными ресурсами.
leander
11
У меня недостаточно репутации, чтобы комментировать, но если вам нравится работать с QT, у них есть своя версия.
#include<QtCore/qmath.h>
qPow(x, y);// returns x raised to the y power.
Или, если вы не используете QT, cmath имеет в основном то же самое.
#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>usingnamespace 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);}
// определение функции 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);}
Во многих ответах предлагались pow()или аналогичные альтернативы или их собственные реализации. Однако, учитывая примеры ( 2^1, 2^2и 2^3) в вашем вопросе, я бы предположил, нужно ли вам только возвести 2в целую степень. Если это так, я бы посоветовал вам использовать 1 << nдля 2^n.
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
Я использую библиотеку cmathили math.hдля того, чтобы использовать pow()библиотечные функции, которые заботятся о полномочиях
#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;return0;}
используйте функцию pow () в библиотеке cmath, tgmath или math.h.
#include<iostream>#include<cmath>usingnamespace std;int main(){int a,b;
cin >> a >> b;
cout << pow(a,b)<< endl;// this calculates a^breturn0;}
обратите внимание, что если вы вводите power как любой тип данных, кроме long double, то ответ будет повышен до типа double. то есть он будет принимать входные данные и выдавать двойные выходные данные. для длинных двойных входов тип возвращаемого значения - long double. для изменения ответа на использование int int c = (int) pow (a, b)
Но помните, что для некоторых чисел это может привести к получению числа меньше правильного. так, например, вам нужно вычислить 5 ^ 2, тогда ответ может быть возвращен как 24.99999999999 на некоторых компиляторах. при изменении типа данных на int ответ будет 24, а не 25 правильным ответом. Итак, сделай это
int c=(int)(pow(a,b)+0.5)
Теперь ваш ответ будет правильным. кроме того, для очень больших чисел данные теряются при изменении типа данных double на long long int. например вы пишете
longlongint c=(longlongint)(pow(a,b)+0.5);
и введите a = 3 и b = 38, тогда результат будет 1350851717672992000, а правильный ответ - 1350851717672992089, это происходит потому, что функция pow () возвращает 1.35085e + 18, которая повышается до int как 1350851717672992000. Я предлагаю написать настраиваемая функция мощности для таких сценариев, например: -
Ответы:
pow () в библиотеке cmath. Больше информации здесь . Не забудьте поставить
#include<cmath>
вверху файла.источник
std::pow
в<cmath>
шапке есть такие перегрузки:Теперь ты не можешь просто сделать
с N будучи ИНТ, потому что он не знает , какой из
float
,double
илиlong double
версии он должен принять, и вы получите ошибку неоднозначности. Для всех трех потребуется преобразование из int в число с плавающей запятой, и все три одинаково дороги!Поэтому убедитесь, что первый аргумент введен так, чтобы он идеально соответствовал одному из этих трех. Я обычно использую
double
Снова какая-то адвокатская хрень. Я сам часто попадал в эту ловушку, поэтому хочу вас об этом предупредить.
источник
int N; pow(2.0, N)
все равно будет двусмысленно::could be 'pow(double,int)' or 'pow(double,double)'
- / → caststd::pow(2.0, 3)
.pow(2, N)
однозначно, начиная с C ++ 11, потому что есть функция-шаблон, принимающая любой арифметический тип в качестве параметров.В C ++ оператор «^» - это побитовое ИЛИ. Не работает для возведения в степень. X << n - это сдвиг двоичного числа влево, который совпадает с умножением x на 2 n раз и может использоваться только при возведении 2 в степень. Функция POW - это математическая функция, которая работает в общем случае.
источник
1 << n
это то же самое, что возведение 2 в степень n, или2^n
.1 << n
понял, почему "1" в комментарии @AshishAhuja, это потому, что1 << 0 = 1
с тех пор серия идет следующим образом2^0 = 1
;1 << 1 = 2
поскольку2^1 = 2
;1 << 2 = 4
с тех пор2^2 = 4
и так далее ...Вы должны уметь использовать в математике обычные методы C.
#include <cmath>
pow(2,3)
если вы используете unix-подобную систему,
man cmath
Вы об этом спрашиваете?
Sujal
источник
Используйте функцию pow (x, y): см. Здесь
Просто включите math.h, и все готово.
источник
Хотя
pow( base, exp )
это отличное предложение, имейте в виду, что он обычно работает с плавающей запятой.Это может быть, а может и не быть тем, что вам нужно: в некоторых системах простой цикл умножения на аккумулятор будет быстрее для целочисленных типов.
И, в частности, для квадрата, вы могли бы просто перемножить числа вместе, с плавающей запятой или целым числом; это не совсем снижение читабельности (ИМХО), и вы избегаете накладных расходов на производительность при вызове функции.
источник
У меня недостаточно репутации, чтобы комментировать, но если вам нравится работать с QT, у них есть своя версия.
Или, если вы не используете QT, cmath имеет в основном то же самое.
источник
// определение функции raiseToPower
источник
если вы хотите иметь дело только с base_2, я рекомендую использовать оператор сдвига влево << вместо математической библиотеки .
образец кода :
образец вывода:
источник
Это пау или пауф в
<math.h>
Нет специального инфиксного оператора, как в Visual Basic или Python.
источник
Во многих ответах предлагались
pow()
или аналогичные альтернативы или их собственные реализации. Однако, учитывая примеры (2^1
,2^2
и2^3
) в вашем вопросе, я бы предположил, нужно ли вам только возвести2
в целую степень. Если это так, я бы посоветовал вам использовать1 << n
для2^n
.источник
Ваш исходный заголовок вопроса вводит в заблуждение. Чтобы просто квадрат , используйте
2*2
.источник
Обратите внимание, что использование
pow(x,y)
менее эффективно, чемx*x*x
y раз, как показано и ответили здесь https://stackoverflow.com/a/2940800/319728 .Так что если вы собираетесь использовать эффективность
x*x*x
.источник
источник
Я использую библиотеку
cmath
илиmath.h
для того, чтобы использоватьpow()
библиотечные функции, которые заботятся о полномочияхисточник
Сначала добавьте,
#include <cmath>
затем вы можете использоватьpow
метод в своем коде, например:Какие 3,5 - базовые, а 3 - опытные
источник
используйте функцию pow () в библиотеке cmath, tgmath или math.h.
обратите внимание, что если вы вводите power как любой тип данных, кроме long double, то ответ будет повышен до типа double. то есть он будет принимать входные данные и выдавать двойные выходные данные. для длинных двойных входов тип возвращаемого значения - long double. для изменения ответа на использование int int c = (int) pow (a, b)
Но помните, что для некоторых чисел это может привести к получению числа меньше правильного. так, например, вам нужно вычислить 5 ^ 2, тогда ответ может быть возвращен как 24.99999999999 на некоторых компиляторах. при изменении типа данных на int ответ будет 24, а не 25 правильным ответом. Итак, сделай это
Теперь ваш ответ будет правильным. кроме того, для очень больших чисел данные теряются при изменении типа данных double на long long int. например вы пишете
и введите a = 3 и b = 38, тогда результат будет 1350851717672992000, а правильный ответ - 1350851717672992089, это происходит потому, что функция pow () возвращает 1.35085e + 18, которая повышается до int как 1350851717672992000. Я предлагаю написать настраиваемая функция мощности для таких сценариев, например: -
а затем вызывая его, когда захотите,
Для чисел, превышающих диапазон long long int, используйте либо библиотеку boost, либо строки.
источник
__
, зарезервированы, вероятно, вам следует выбрать что-то другое.