У меня есть 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
Примечание. Я прочитал все эти вопросы о среднем количестве двух чисел, но я не вижу, как этот метод может быть применен к среднему из трех чисел.
Было бы очень легко с использованием 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
Вопрос: Есть ли способ вычислить усеченное среднее из 3 очень больших целых чисел только с использованием типа long
? Не рассматривайте этот вопрос как С# -специфичный, просто мне легче предоставить образцы в С#.