формула — стандартное отклонение без среднего переполнения стека

У меня есть работающая программа, чтобы найти стандартное отклонение многих целых чисел. Тем не менее, я должен найти способ получить стандартное отклонение без среднего значения.

Я понимаю, что формула:
стандартный dev = sqrt [(B — A ^ 2 / N) / N]

где

A — сумма значений данных;

B — сумма квадратов значений данных;

N — количество значений данных.

но как мне написать это в коде?
Это моя функция для отклонения, но она использует среднее значение:

float calculateSD(int arr[])
{
float sum = 0.0, mean, standardDeviation = 0.0;

int i;

for(i = 0; i < SIZE; ++i)
{
sum += arr[i];
}

mean = sum/SIZE;

for(i = 0; i < SIZE; ++i)
//convert standardDeviation to float
standardDeviation += static_cast<float>(pow(arr[i] - mean, 2));
//return standard deviation
return sqrt(standardDeviation / SIZE);

}

-2

Решение

#include <iostream>
#include <vector>
#include <numeric>
#include <math.h>

double stddev(std::vector<int> const& data)
{
auto stats = std::make_pair(0.0,0.0);
stats = std::accumulate(data.begin(), data.end(), stats,
[](std::pair<double,double> stats, double x) {
stats.first += x;
stats.second += x * x;
return stats;
});
return sqrt((stats.second - pow(stats.first, 2.0) / data.size()) / data.size());
}

int main(int argc, const char *argv[])
{
std::cout << stddev({1,1,1,1}) << std::endl;
std::cout << stddev({1,2,1,2}) << std::endl;
std::cout << stddev({1,10,1,10}) << std::endl;
}
0

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

Других решений пока нет …

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