বিষয় 70 / 91· সফটওয়্যার প্রকৌশল ও ডিজিটাল ডেলিভারি
নিখুঁত-সেন্ট ব্যয় বণ্টন
একটি মোট অর্থ — যৌথ ভর্তুকি, অবকাঠামো চালান, বাজেট প্রভাব সংখ্যা — একাধিক প্রাপকের মধ্যে সরল শতাংশ গণিতে ভাগ করলে প্রায়ই এমন অংশ আসে যা যোগ করলে মূল মোটের সমান হয় না। নিখুঁত-সেন্ট বণ্টন এর প্রতিকার: একটি পূর্ণসংখ্যা/দশমিক পদ্ধতি যা মুদ্রার ক্ষুদ্রতম এককে (সেন্ট) কাজ করে এবং নিশ্চিত করে যে অংশগুলো যোগ করলে হুবহু মোটের সমান হবে, ভাগ যত অসমানই হোক। যে কোনো সফটওয়্যার প্রকৌশলীকে একটি ভাগ করা মোট সেন্ট পর্যন্ত মেলাতে হলে — বেতনপত্র, ভর্তুকি প্রদান, যৌথ সেবার চার্জ — এই প্যাটার্ন দরকার, ভাসমান-বিন্দু শতাংশ নয়।
কেন এটি গুরুত্বপূর্ণ
এটি এন্টারপ্রাইজ সফটওয়্যার প্রকৌশলের একটি নামযুক্ত মৌলিক প্যাটার্ন: Martin Fowler-এর Patterns of Enterprise Application Architecture (২০০২) Money ও Allocate নথিবদ্ধ করে ঠিক কারণ "$১০০ তিন ভাগে ভাগ করা" এমন সমস্যা যা সরল কোড সবসময় ভুল করে, এবং নীরবে ভুল করে — ত্রুটি দেখা দেয় যখন কেউ বইয়ের হিসাব মেলায় এবং দেখে অংশগুলো মোটের চেয়ে এক সেন্ট কম (বা বেশি)। স্বাস্থ্য-অর্থনীতি ও NHS আর্থিক কাজে এটি একাডেমিক নয়: একটি বাজেট প্রভাব সংখ্যা অবস্থান, বছর বা ট্রাস্ট অনুযায়ী ভাগ করা হয়; যৌথ অবকাঠামো ও লাইসেন্স ব্যয় কর্মী সংখ্যা বা কার্যকলাপ অনুপাতে বিভাগগুলোতে বণ্টিত হয়। এই ভাগগুলোর প্রতিটি হুবহু মিলতে হবে, কারণ যে অর্থ পরিচালক এমন অংশ পান যা মোটে যোগ হয় না, তিনি পুরো মডেলের ওপর আস্থা হারাবেন।
গণিত
সরল পদ্ধতি (ভুল):
অংশ_i = গোলাকার(মোট × অনুপাত_i / Σ অনুপাত) — প্রতিটি অংশ আলাদাভাবে গোলাকার
নিখুঁত পদ্ধতি (বৃহত্তম অবশিষ্ট / "largest remainder allocation"):
1. ভিত্তি_i = নিচে_গোলাকার(মোট_ক্ষুদ্রতম_একক × অনুপাত_i / Σ অনুপাত) — শুধু পূর্ণ ক্ষুদ্রতম একক (সেন্ট)
2. অবশিষ্ট = মোট_ক্ষুদ্রতম_একক − Σ ভিত্তি_i — বাকি সেন্ট, সবসময় < প্রাপকের সংখ্যা
3. ধাপ ১ থেকে বৃহত্তম ভগ্নাংশ অংশযুক্ত `অবশিষ্ট` সংখ্যক প্রাপককে
প্রত্যেককে ১টি করে অতিরিক্ত ক্ষুদ্রতম একক দিন যতক্ষণ না অবশিষ্ট শেষ হয়
ফলাফল: Σ অংশ_i == মোট সবসময়, কাঠামোগতভাবে
নিখুঁত পদ্ধতি কখনো কোনো একক অংশ আলাদাভাবে গোলাকার করে না — এটি সম্পূর্ণ বণ্টনকে একটি একক ক্রিয়ায় গোলাকার করে, আর এটিই যোগফল-অপরিবর্তনীয়তাকে সত্য করে।
সমাধানকৃত উদাহরণ
$১০০.০০ তিনটি সমান অংশে ভাগ করা (অনুপাত = [1, 1, 1])।
সরল পদ্ধতি: $100.00 ÷ 3 = $33.333… প্রতিটি আলাদাভাবে নিকটতম সেন্টে গোলাকার করলে প্রতি প্রাপক $৩৩.৩৩ হয়। যোগফল: $33.33 × 3 = $৯৯.৯৯ — এক সেন্ট হারিয়ে গেছে, এবং কোনো একক আইটেম এত "ভুল" নয় যে চোখে দেখে ধরা যাবে।
নিখুঁত পদ্ধতি: ভিত্তি = তিনজনেরই $৩৩.৩৩ (নিচে_গোলাকার(10,000 / 3) = 3,333 সেন্ট প্রতি প্রাপক থেকে মোট ৯,৯৯৯ ক্ষুদ্রতম একক)। অবশিষ্ট ১ সেন্ট (১০,০০০ − ৯,৯৯৯)। সেই একমাত্র সেন্ট ভাগে সবচেয়ে বড় ভগ্নাংশ অংশযুক্ত প্রাপকের কাছে যায় — কোন প্রাপক তা টাই-ব্রেকিংয়ের অভ্যন্তরীণ বিবরণ, কলারের নির্ভর করা উচিত নয়। দুজন প্রাপক $৩৩.৩৩ এবং একজন $৩৩.৩৪ পায়, এবং তিন অংশ হুবহু $১০০.০০ যোগ হয়।
এটিই সেই গণিত যা বাজেট প্রভাব বিশ্লেষণ দরকার যখনই একটি মোট বাজেট প্রভাব সংখ্যা অবস্থান, জনসংখ্যা গোষ্ঠী বা আর্থিক বছর অনুযায়ী ভাগ করে প্রকাশিত মোটের সাথে মেলাতে হয় — একই ধরনের অনেক আইটেম অপচয় ছাড়া যোগ করার যুগল সমস্যার জন্য মুদ্রা-নিরাপদ ব্যয় সংকলন দেখুন।
সফটওয়্যার প্রকৌশলের সাথে সংযোগ
এটি এন্টারপ্রাইজ সফটওয়্যার স্থাপত্যের "Money প্যাটার্ন" হুবহু — এই ধরনের বাগের জন্য নামযুক্ত মৌলিক প্যাটার্ন, একবারের কৌশল নয়। এই বাগ থেকেই বাস্তব আর্থিক সমন্বয় ব্যর্থতা উৎপাদনে গেছে: f64-তে গণনা করা অনুপাতিক ভাগ, প্রতি প্রাপকে গোলাকার, এবং মূল মোটের বিপরীতে কখনো যাচাই না করা। এটি সরাসরি এই ভান্ডারের মালিকানার মোট ব্যয় মডিউলের সাথে সংযুক্ত, যা বর্তমানে বছর ও বিকল্প জুড়ে সাধারণ ভাসমান-বিন্দু ব্যয় সংকলন করে — একই সঠিকতার শৃঙ্খলা প্রযোজ্য যখন একটি TCO বা বাজেট প্রভাব মোট শুধু যোগ নয়, বণ্টন করতে হয়।
ঝুঁকিপূর্ণ দিক
- বৃহত্তম অবশিষ্টের বদলে শতাংশ-তারপর-গোলাকার: ভাসমান-বিন্দু শতাংশ দিয়ে বণ্টন করে প্রতি প্রাপক আলাদাভাবে গোলাকার করা, যা গোলাকরণ ত্রুটি চক্রবৃদ্ধি করে এবং কদাচিৎ মোটে ফিরে যোগ হয়, বিশেষ করে বেশি প্রাপক থাকলে।
- মুদ্রার ক্ষুদ্রতম একক ঘাত উপেক্ষা: সব মুদ্রায় ২ দশমিক স্থান ধরে নেওয়া — জাপানি ইয়েনে ০, কিছু মুদ্রায় ৩ — হাতে-লেখা অনুপাতিক ভাগ প্রায়ই ২ হার্ডকোড করে এবং অন্য মুদ্রায় নীরবে ভেঙে যায়। নিখুঁত বণ্টন রুটিন মুদ্রা থেকেই ঘাত পড়ে (ISO 4217)।
- ইতিমধ্যে বণ্টিত অবশিষ্ট পুনরায় বণ্টন: আইডেমপোটেন্সি যাচাই ছাড়া আগের বণ্টনের বাকি অংশে বণ্টন রুটিন আবার চালানো, যা একই প্রাপককে একই সেন্ট দুবার জমা দিতে পারে।
উৎস
- Fowler M. "Patterns of Enterprise Application Architecture." Addison-Wesley, 2002 —
MoneyওAllocateপ্যাটার্ন। - ISO 4217 — মুদ্রা ও তহবিল কোডের মানদণ্ড, যা প্রতিটি মুদ্রার ক্ষুদ্রতম একক ঘাত সংজ্ঞায়িত করে।