3 개의 매우 큰 부호있는 정수가 있습니다.
long x = long.MaxValue;
long y = long.MaxValue - 1;
long z = long.MaxValue - 2;
잘린 평균을 계산하고 싶습니다. 예상 평균 값은 long.MaxValue - 1
입니다 9223372036854775806
.
다음과 같이 계산하는 것은 불가능합니다.
long avg = (x + y + z) / 3; // 3074457345618258600
참고 : 평균 2 개의 숫자에 대한 모든 질문을 읽었지만 그 기술이 평균 3 개의 숫자에 어떻게 적용될 수 있는지 모르겠습니다.
를 사용하면 매우 쉬울 BigInteger
수 있지만 사용할 수 없다고 가정합시다.
BigInteger bx = new BigInteger(x);
BigInteger by = new BigInteger(y);
BigInteger bz = new BigInteger(z);
BigInteger bavg = (bx + by + bz) / 3; // 9223372036854775806
로 변환하면 double
물론 정밀도가 떨어집니다.
double dx = x;
double dy = y;
double dz = z;
double davg = (dx + dy + dz) / 3; // 9223372036854780000
로 변환 decimal
하면 작동하지만 사용할 수 없다고 가정합시다.
decimal mx = x;
decimal my = y;
decimal mz = z;
decimal mavg = (mx + my + mz) / 3; // 9223372036854775806
질문 :long
유형을 사용하는 경우에만 3 개의 매우 큰 정수의 잘린 평균을 계산하는 방법이 있습니까? 이 질문을 C # 관련 질문으로 간주하지 마십시오. C #으로 샘플을 제공하는 것이 더 쉽습니다.
long.MinValue
와 long.MaxValue
값 사이에.
BigInteger
되거나 decimal
배제 되는 실제 이유가 있습니까? 아니면 이것을 어렵게 만들기 위해서입니까?