У меня была эта проблема, а также некоторые другие проблемы с Brewed Python на OS & nbsp; X v10.9 (Mavericks).
sudo pip install --upgrade setuptools
не работал для я, и я думаю, что моя setuptools / дистрибутив setup был взломан.
Я, наконец, получил его для работы, запустив
sudo easy_install -U setuptools
pow () в библиотеке cmath. Подробнее здесь .
Не забудьте поместить #include
в начало файла.
используйте голову () функция в cmath, tgmath или 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;
}
действительно отмечают, что при предоставлении входа питанию как какой-либо тип данных кроме длинного, двойного затем, ответ будет продвинут на тот из дважды. это - это, возьмет вход и даст вывод как дважды. для длинных двойных исходных данных тип возврата является долго двойным. для изменения ответа на международное использование, интервал c = (международная) голова (a, b)
, Но, действительно имеют в виду для некоторых чисел, что это может привести к числу меньше, чем корректный ответ. так, например, необходимо вычислить 5^2, затем ответ может быть дан как 24,99999999999 на некоторых компиляторах. при изменении типа данных к интервалу ответ будет 24, а не 25 корректный ответ. Так, сделайте это
int c=(int)(pow(a,b)+0.5)
Теперь, Ваш ответ будет корректен. также, для данных очень больших количеств потерян в изменении типа данных, вдвое большего по сравнению с долгим длинным целым. например, Вы пишете
long long int c=(long long int)(pow(a,b)+0.5);
и даете вход a=3 и b=38 затем, результат выйдет, чтобы быть 1350851717672992000, в то время как корректный ответ равняется 1350851717672992089, это происходит, потому что голова () функционирует возврат 1.35085e+18, который продвинут на интервал как 1350851717672992000. Я предлагаю писать пользовательскую функцию питания для таких сценариев, like:-
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;
}
и затем назвать его каждый раз, когда Вы хотите как,
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
Для чисел, больше, чем диапазон долгого длинного целого, или пользуетесь библиотекой повышения или строками.
pow(2.0,1.0)
pow(2.0,2.0)
pow(2.0,3.0)
Ваш первоначальный заголовок вопроса вводит в заблуждение. Чтобы просто квадрат , используйте 2 * 2
.
Это pow или powf в
Нет специального инфиксного оператора, как в Visual Basic или Python
Хотя pow (base, exp)
- отличное предложение, имейте в виду, что он обычно работает с числами с плавающей точкой.
Это может быть или не то, что вы хотите: в некоторых системах простое умножение цикла на аккумуляторе будет быстрее для целочисленных типов.
А конкретно для квадрата, вы можете просто самостоятельно перемножить числа вместе, с плавающей запятой или целыми; на самом деле это не снижение читабельности (IMHO), и вы избегаете накладных расходов на производительность при вызове функции.
Вы должны уметь использовать в математике обычные методы C.
#include
pow (2,3)
, если вы используете unix- как система, man cmath
Это то, о чем вы спрашиваете?
Sujal
Используйте функцию pow (x, y): См. Здесь
Просто включите math.h, и все готово.
std :: pow
в заголовке
содержит следующие перегрузки:
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);
Теперь вы не можете просто сделать
pow(2, N)
, когда N является int, потому что он не знает, какую из версий float
, double
или long double
] ему следует использовать, и вы получите ошибку неоднозначности. Для всех трех потребуется преобразование из int в число с плавающей запятой, и все три одинаково дороги!
Следовательно, убедитесь, что первый аргумент введен так, чтобы он идеально соответствовал одному из этих трех. Я обычно использую дубль
pow(2.0, N)
Опять какая-то адвокатская хрень от меня. Я сам часто попадал в эту ловушку, поэтому хочу вас об этом предупредить.