статистика — Как найти стандартное отклонение в C ++?

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

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
float num[46];
float amount_num;

cout<< "How many numbers do you want? (max 45)\n";
cin>> amount_num;

for (int counter =0; counter < amount_num; counter++)
{
cout<< "Enter value "<< counter<< ":"<< endl;
cin>> num[counter];
}

int total;
int average;
int latot;
int fun;
int n;
int taco;
int sd;
int bell;

for(int t= 0; t< amount_num; t++)

{
total = total + num[t];
}

average= total/amount_num;

for(int t= 0; t< amount_num; t++){
latot =  num[t] - average;
bell = pow (latot,2);
fun = fun + bell;
}

n=amount_num-1;
taco=fun/n;
sd=sqrt(taco);

cout<< "Average: "<< average<< endl;
cout<< "SD: "<< sd<< endl;
}

1

Решение

Логика вашего кода выглядит правильно. Однако вы не должны использовать целочисленные переменные. Вместо этого используйте переменные с плавающей точкой. Использование целочисленных переменных приводит к большому целочисленному делению, которое вызывает много ошибок численного усечения.

Например, с average= total/amount_num если total 128 и amount_num тогда 10 average будет 12, когда это должно быть 12,8. Это ошибки усечения распространяются при вычислении значения отклонений, num[t] - average,

Аналогичная проблема целочисленного деления найдена с taco=fun/n,

Использование переменных с плавающей точкой устраняет целочисленное деление и эти промежуточные числовые ошибки.

0

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


По вопросам рекламы [email protected]