আমার কাছে 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 টি গড়ে 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 টি খুব বড় পূর্ণসংখ্যার কাটা যাওয়ার কোনও উপায় আছে ? এই প্রশ্নটিকে সি # -রূপে বিবেচনা করবেন না, কেবল # সি-তে নমুনা সরবরাহ করা আমার পক্ষে সহজ।
long.MinValue
এবং long.MaxValue
মানগুলির মধ্যে কাজ করবে না ।
BigInteger
বা decimal
বাদ গেছে, বা এটি কেবল এটিকে শক্ত করার পক্ষে?