#include <type_traits>
template <typename T>
double average_so(T a[], int count)
{
typedef typename std::conditional<sizeof(T) >= sizeof(float), T, int>::type _T;
_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;
}
* 주의: std::conditional은 C++11 확장임.
감사감사~
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.