template<typename T>

double average_so(T a[], int count)

{

    T remainder = 0;

    T avg = 0;

    T divisor = T(count);

    for(int i = 0; i < count; ++i)

    {

        T v, vv;

        avg += v = a[i] / divisor;

        vv = v * divisor;

        remainder += a[i] - vv;

    }

    return avg + double(remainder) / divisor;

}


장점 : int 배열을 int 단위로 계산하고도 소숫점 결과를 얻을 수 있다.

double 이나 float 배열도 각 단위타잎으로 계산되므로 성능 저하가 없다.