Примечание: Не похоже, что вы вычисляете дисперсию.
Дисперсия рассчитывается путем вычитания среднего значения из каждого элемента и вычисления взвешенной суммы этих разностей.
Итак, что вам нужно сделать, это:
// Get mean
double mean = static_cast<double>(value_sum)/size;
// Calculate variance
double variance = 0;
for(int i = 0;i<size;++i)
{
variance += (MyArray[i]-mean)*(MyArray[i]-mean)/size;
}
// Display
cout<<variance;
Обратите внимание, что это выборочная дисперсия, и она используется, когда базовое распределение неизвестно (поэтому мы предполагаем равномерное распределение).
Кроме того, после некоторого осмотра я обнаружил, что это не объективная оценка. Wolfram Alpha есть что сказать по этому поводу, но в качестве примера, когда MATLAB вычисляет дисперсию, он возвращает "выборочную дисперсию с поправкой на смещение".
Дисперсию с поправкой на смещение можно получить путем деления каждого элемента на size-1
или:
//Please check that size > 1
variance += (MyArray[i]-mean)*(MyArray[i]-mean)/(size-1);
Также обратите внимание, что значение mean
остается неизменным.