Почему возникает ошибка переполнения ? Где 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.

→ Ссылка