3 çok büyük işaretli tam sayım var.
long x = long.MaxValue;
long y = long.MaxValue - 1;
long z = long.MaxValue - 2;
Kısaltılmış ortalamalarını hesaplamak istiyorum. Beklenen ortalama değer long.MaxValue - 1
, yani 9223372036854775806
.
Bunu şu şekilde hesaplamak imkansızdır:
long avg = (x + y + z) / 3; // 3074457345618258600
Not: 2 sayının ortalamasıyla ilgili tüm bu soruları okudum, ancak bu tekniğin ortalama 3 sayıya nasıl uygulanabileceğini bilmiyorum.
Kullanımı ile çok kolay olurdu BigInteger
ama kullanamayacağımı varsayalım.
BigInteger bx = new BigInteger(x);
BigInteger by = new BigInteger(y);
BigInteger bz = new BigInteger(z);
BigInteger bavg = (bx + by + bz) / 3; // 9223372036854775806
Ben dönüştürmek olursa double
, o zaman, tabii ki, hassas kaybetmek:
double dx = x;
double dy = y;
double dz = z;
double davg = (dx + dy + dz) / 3; // 9223372036854780000
Dönüştürürsem decimal
işe yarıyor, ama aynı zamanda onu kullanamayacağımı varsayalım.
decimal mx = x;
decimal my = y;
decimal mz = z;
decimal mavg = (mx + my + mz) / 3; // 9223372036854775806
Soru: Çok büyük 3 tam sayının kesilmiş ortalamasını yalnızca long
tür kullanımıyla hesaplamanın bir yolu var mı ? Bu soruyu C # -özel olarak düşünmeyin, sadece C # ile örnekler sağlamak benim için daha kolay.