나는 두 배의 긴 순서를 가지고 있습니다 (100 000보다 길지 않다고 가정합니다). 또한 각 숫자가 200 000보다 크지 않다고 가정합시다. 아래의 알고리즘이 이러한 계산에 적합한 경우? 충분히 정확할까요?두 배의 순서의 무게 평균을 계산하십시오
예를 들어 100 000 번 200 000의 합계를 100 000으로 나누면 199 999와 200 001 사이의 값을 갖지만 200 100이나 그와 같은 값은 없을 것으로 예상됩니다 (이러한 특정 숫자는 내 클래스 테스트를 위해 MarcinJuraszek에게 감사드립니다.)
class Candle
{
public Candle(double value)
{
ValueUpdated(value);
}
private double sum = 0;
private double count = 0;
public void ValueUpdated(double value)
{
sum += value;
count++;
}
public double WeightAverage
{
get { return sum/count; }
}
}
C#에서 double의 정밀도는 소수점 이하 15-16 자입니다. 당신이 6 번째 소수점 자리에서만 정밀도를 찾고 있기 때문에, 이것이 당신에게 문제가 될 것이라고는 상상할 수 없습니다. –
참고 이것은 일반적으로 일반적으로 "가중 평균"이 아니라 "롤링"또는 "이동"평균이라고합니다. @DavidHope가 말했듯이 당신이 찾고있는 정밀도는 괜찮을 것이다. 그러나 어떤 이유에서'2147483647' 이상의 아이템의 평균을 계산한다면 실패 할 것이다. – NominSim
몇 가지 빠른 테스트를 수행하고 500,000 개의 테스트 항목을 사용하여 16 번째 소수점 이하 자릿수에서 오류가 발생했습니다 –