Другие языки программирования и технологии
Возвести в степень в с++
Как возводить в степень большие числа в с++?.Реализую простейшую операцию k=pow(m,7); (m=44) и считается неверно!.. если вместо 7 использовать 5, то считается все правильно, если 6 - вообще значение отрицательным получается, в чем ошибка не пойму. может нужно какую-то другую функцию использовать для возведения в степень?..
типы данных какие?
попробуй использовать double
можно использовать классическую формулу
x в степени y
result = exp(y*ln(x));
попробуй использовать double
можно использовать классическую формулу
x в степени y
result = exp(y*ln(x));
double m = 44, k = 7, result = 0;
result = pow(m, k);
cout << " Result = " << result; // Result = 3.19278e+011
всё работает!!!
result = pow(m, k);
cout << " Result = " << result; // Result = 3.19278e+011
всё работает!!!
Просто результат не помещается в k. Выбери для k тип с большим диапазоном допустимых значений.
C++ -не Pascal, это язык для профессионалов, он ловить свойственные начинающим ошибки не будет.
C++ -не Pascal, это язык для профессионалов, он ловить свойственные начинающим ошибки не будет.
Здесь ошибка у вас, СКОРЕЕ ВСЕГО, В ВЫБОРЕ формата числа КККККК.
Это не REAL (десятичное) , а (по Паскалю) = FLOAT. (с плавающей запятой) .
Я ТАК думаю.
Это не REAL (десятичное) , а (по Паскалю) = FLOAT. (с плавающей запятой) .
Я ТАК думаю.
А у тебя k какого типа?
44^7 вообще влезет хоть в один тип?
44^7 вообще влезет хоть в один тип?
#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;
}
можете проверить по калькулятору
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;
}

можете проверить по калькулятору
Точность не велика, но вот твой ответ с верным порядком:
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! (Но это не так просто вычислить; -))
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! (Но это не так просто вычислить; -))
Так. Я надеюсь, что в таком точно виде 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. А у вас?
#include <iostream>
#include <cmath>
int main() { double k = pow(44.0, 7.0); std::cout << k << std::endl; }
У меня это 3.19278e+011. А у вас?
flaot тут не надо т. к. мы используем целое натуральное число и степень положительная
44^7 это очень большое число и не влазит в тип вашего числа К
44^7 это очень большое число и не влазит в тип вашего числа К
Похожие вопросы
- Помогите возвести в степень по модулюy=4^13456 (mod 31991)
- Как в питоне возвести 2 в 44444444 степень ?
- как в паскале возвести число в произвольную степень???
- Возведите число в степень циклом (Visual Basic)
- TurboPascal. Дана матрица целых чисел. Возвести её во вторую степень, вывести исходную и полученную матрицы
- как возвести в Паскале выражение в произвольную степень? например в четвертую.
- С++. в какую максимальную (минимальную) степень можно возвести 10 в С++?
- Даны 3 целых числа. Возвести в квадрат отрицательные числа и в третью степень - положительные (число 0 не изменять)
- 8.33891e+307 и 1.26192e+308, что значат эти числа? Что это за "е"? И да, я знаю что 308 это степень. Но степень чего?
- C++. Функция возведения в степень