Другие языки программирования и технологии

Возвести в степень в с++

Как возводить в степень большие числа в с++?.Реализую простейшую операцию k=pow(m,7); (m=44) и считается неверно!.. если вместо 7 использовать 5, то считается все правильно, если 6 - вообще значение отрицательным получается, в чем ошибка не пойму. может нужно какую-то другую функцию использовать для возведения в степень?..
типы данных какие?

попробуй использовать double

можно использовать классическую формулу

x в степени y

result = exp(y*ln(x));
ДБ
Дмитрий Берестов
18 423
Лучший ответ
double m = 44, k = 7, result = 0;
result = pow(m, k);
cout << " Result = " << result; // Result = 3.19278e+011

всё работает!!!
Дима Хиталенко
Дима Хиталенко
93 111
Просто результат не помещается в k. Выбери для k тип с большим диапазоном допустимых значений.
C++ -не Pascal, это язык для профессионалов, он ловить свойственные начинающим ошибки не будет.
Здесь ошибка у вас, СКОРЕЕ ВСЕГО, В ВЫБОРЕ формата числа КККККК.
Это не REAL (десятичное) , а (по Паскалю) = FLOAT. (с плавающей запятой) .
Я ТАК думаю.
Mr. Lolguy
Mr. Lolguy
93 614
А у тебя k какого типа?
44^7 вообще влезет хоть в один тип?
Asilbek Batirbekov
Asilbek Batirbekov
83 161
#include <iostream>
using namespace std;

template<class> T powq(T a,int k)
{
T b=1; while(k) if(k%2) { b*=a; k/=2,a*=a; } return b;
}

int main()
{
unsigned long long m=44; int k=7;
cout << powq(m,k);
return 1;
}


можете проверить по калькулятору
Геxа, Геxа
Геxа, Геxа
76 473
Точность не велика, но вот твой ответ с верным порядком:
cout < < (double)44*44*44*44*44*44*44 < < endl;
cout < < pow((double)44,7);
3.19278е+011
3.19278е+011
то есть более 319 миллиардов 270 миллионов!
или точно - 319 277 809 664! (Но это не так просто вычислить; -))
АД
Алтын Дан
35 996
Так. Я надеюсь, что в таком точно виде k=pow(m,7); (m=44) вы не компилировали. Данный код (именно этот, скопируйте и скомпильте) выводит какой результат?

#include <iostream>
#include <cmath>

int main() { double k = pow(44.0, 7.0); std::cout << k << std::endl; }

У меня это 3.19278e+011. А у вас?
flaot тут не надо т. к. мы используем целое натуральное число и степень положительная
44^7 это очень большое число и не влазит в тип вашего числа К