C++ 无平均值c+的标准偏差+;

C++ 无平均值c+的标准偏差+;,c++,formula,mean,standard-deviation,C++,Formula,Mean,Standard Deviation,我有一个功能强大的程序,可以找到许多整数的标准偏差。然而,我要找到一种方法来得到没有平均值的标准偏差 我知道公式是: 标准偏差=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 &

我有一个功能强大的程序,可以找到许多整数的标准偏差。然而,我要找到一种方法来得到没有平均值的标准偏差

我知道公式是: 标准偏差=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);

}    
float calculates(int-arr[])
{
浮动总和=0.0,平均值,标准偏差=0.0;
int i;
对于(i=0;i
#包括
#包括
#包括
#包括
双STDEV(标准::向量常量和数据)
{
自动统计=std::make_对(0.0,0.0);
stats=std::累加(data.begin()、data.end()、stats、,
[](标准::配对统计,双x){
stats.first+=x;
stats.second+=x*x;
返回统计;
});
返回sqrt((stats.second-pow(stats.first,2.0)/data.size())/data.size());
}
int main(int argc,const char*argv[]
{

std::cout
可以得到没有平均值的标准偏差吗
我可以问为什么吗?作业可能?你有总和和计数。除法…..来吧。但是我该如何在代码中写呢?--这是一个三行程序,使用and
进行
循环。
#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;
}