У меня есть программа, которая читает в 5 целых чисел и выдает результаты различных вычислений с использованием этих чисел. У меня возникают особые трудности при вычислении среднего геометрического значения. Я знаю, что вы должны умножить числа вместе и взять n-й корень из результата.Почему функция pow дает мне nan как ответ?
мой код выглядит следующим образом (предполагается, что все и директивы #includes основного метода являются правильными.):
int num1, num2, num3, num4, num5;
cout << "Enter five integers: \n";
cin >> num1 >> num2 >> num3 >> num4 >> num5;
double gMean = pow((num1 * num2 * num3 * num4 * num5), (1.0/5.0));
cout << "Geometric mean = " << gMean << endl;
Этого код работает для небольших чисел, например, 1, 2, 3, 4, 5, но когда Я ввожу большие числа, это дает мне нан как ответ.
Числа мне нужно работать в этом являются: 85, 43, 95, 100 и 78
Моего вопроса: Почему военнопленные() функция дает мне нана в ответ, когда большие значения вставлять, но возвращать правильные ответы при вводе небольших чисел?
EDIT: Первый вопрос ответил. Теперь, когда я знаю, что у меня проблемы с переполнением, как мне его решить?
Цифры в вашем примере вызывают неопределенное поведение, потому что они переполняют 'int'. – chris
Не могли бы вы найти, что 'errno' содержит сразу после строки, вызывающей' pow' i.e перед 'cout'? Вы должны иметь возможность печатать его просто. –
Интересно, если выборка не была выбрана намеренно, чтобы выделить эту потенциальную проблему? –