функция — проблема расчета в переполнении стека

Поэтому в этой программе я пытаюсь распечатать стандартное отклонение набора чисел, в который вводит пользователь. Формула для расчета стандартного отклонения является правильной (или настолько правильной, какой должна быть), так что это не проблема, но когда я запускаю программу, все идет хорошо, пока консоль не распечатает результаты. Он печатает, что totalStandardDeviation = nan

что именно значит? Нэн такой же, как ноль? он как-то потерял значение и не смог его найти? спасибо за любую помощь, которую вы можете предоставить.

#include <iostream>
#include <cmath>
using namespace std;

double returnStandardDeviation(double x, int counter);
double total;

int userInput = 1;
int counter = 0;
double x;
double x1;
double x2;

double standardDeviation;
double totalStandardDeviation;

int main(int argc, const char * argv[])
{
cout << "Please enter a list of numbers. When done enter the number 0 \n";
cin >> userInput;

while (userInput != 0)                         // As long as the user does not enter 0, program accepts more data
{
counter++;
x = userInput;
returnStandardDeviation( x, counter);       // send perameters to function

cout << "Please enter next number \n";
cin >> userInput;
}

cout << "The standard deviation of your "<< counter
<< " numbers is : "<< returnStandardDeviation(x, counter);
return 0;
}double returnStandardDeviation(double x, int counter)
{
x1 += pow(x,2);
x2 += x;
totalStandardDeviation = 0;
totalStandardDeviation += (sqrt(counter * x1 - pow(x2,2))) / (counter * (counter - 1));
return totalStandardDeviation;
}

0

Решение

Ваша формула неверна. Вы либо делите на ноль, либо берете квадратный корень из отрицательного числа.

Проверьте свою формулу!

Дополнительная информация:

NaN это «не число». Это значение с плавающей запятой IEEE, которое сообщает о недопустимых результатах, таких как log (-1) или sqrt (-4).

Кроме того, знайте, что Положительная Бесконечность и Отрицательная Бесконечность также являются значениями с плавающей запятой.

0

Другие решения

NaN расшифровывается как «Не число».

1

NaN может, например, быть результатом:

- Dividing by zero
- Taking the square root of a negative number

В вашей функции оба из них могут произойти. Деление на ноль, например когда counter является <= 1; а также x1 а также x2 неинициализированы (+= добавляет значение справа к их ток значение — которое никогда не было установлено, и поэтому является случайным бредом), что может легко привести к тому, что ваша функция попытается получить квадратный корень некоторого значения < 0.

1

Это выражение

counter * x1 - pow(x2,2)

может очень легко дать отрицательное число. Затем вы переходите к получению его квадратного корня. Это приведет к nan,

Далее этот

counter * (counter - 1)

доходность 0 когда counter является 1, Деление на ноль дает nan,

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector