Почему возникает ошибка переполнения ? Где K*D, подчеркивается волнистой зеленой линией. Работаю в Visual Studio 2019
#include iostream
#include cmath
float calc(int x, int p, int n, int K, int D)
{
return (pow(cos(x),2)) / (K*D) + cos(x)*pow((p-n),3);
}
int main()
{
setlocale(LC_ALL, "Russian");
int x, p, n, K, D;
std::cout << "Введите целое число x: ";
std::cin >> x;
std::cout << "Введите целое число p: ";
std::cin >> p;
std::cout << "Введите целое число n: ";
std::cin >> n;
std::cout << "Введите целое число K: ";
std::cin >> K;
std::cout << "Введите целое число D: ";
std::cin >> D;
std::cout << "Результат данного выражения Q = " <<
calc(x,p,n,K,D) << std::endl;
return 0;
}
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
Предупреждение тут вылезает потому, что целочисленное умножение K*D стоит в выражении, где результат умножения потом все равно будет преобразован в double. Соответственно заранее преобразовав аргументы можно избежать всяких проблем с неопределенным поведением при целочисленном переполнении.
Еще стоит отметить, что результат функции зачем-то преобразуется во float, хотя вроде ничего не мешает возвращать double.