حساب التشبع

الحساب التشبعي هو نوع من الحساب حيث تقتصر جميع العمليات، مثل الجمع والضرب ، على نطاق ثابت بين قيمة دنيا وقيمة قصوى.

إذا كانت نتيجة عملية ما أكبر من القيمة القصوى، تُضبط (" تُثبّت ") عند القيمة القصوى؛ وإذا كانت أقل من القيمة الدنيا، تُثبّت عند القيمة الدنيا. ويأتي الاسم من كون القيمة "تشبعت" بمجرد وصولها إلى القيم القصوى؛ ولن تؤدي أي إضافات إلى القيمة القصوى أو عمليات طرح من القيمة الدنيا إلى تغيير النتيجة.

أمثلة

إذا كان النطاق الصحيح للقيم من -100 إلى 100، فإن عمليات الحساب التشبعية التالية تنتج القيم التالية:

  • 60 + 30 → 90.
  • 60 + 43 → 100. ( ليس المتوقع 103.)
  • (60 + 43) − (75 + 25) → 0. ( ليس الرقم المتوقع 3.) (103 − 100 → 0.)
  • 10 × 11 → 100. ( ليس العدد المتوقع 110.)
  • 99 × 99 → 100. ( ليس الرقم المتوقع 9801.)
  • 30 × (5 − 1) → 100. ( ليس المتوقع 120.) (30 × 4 → 100.)
  • (30 × 5) − (30 × 1) → 70. ( ليس 120 المتوقعة. ليس 100 السابقة.) (100 − 30 → 70.)
  • 30 - 100 - 100 → -100. ( وليس -170 المتوقعة.)

كما يتضح من هذه الأمثلة، قد لا تنطبق خصائص مألوفة كالتجميع والتوزيع على حساب التشبع. [ أ ] وهذا ما يجعل التعامل معه غير مريح في الرياضيات المجردة ، ولكنه يلعب دورًا هامًا في الأجهزة الرقمية والخوارزميات حيث لا يمكن تمثيل سوى القيم التي تتراوح بين قيمة دنيا وقيمة قصوى.

الاستخدام الحديث

عادةً، لا تُنفّذ المعالجات الدقيقة للأغراض العامة عمليات الحساب على الأعداد الصحيحة باستخدام حساب التشبع؛ بل تستخدم بدلاً من ذلك الحساب النمطي الأسهل تنفيذاً ، حيث " تلتف " القيم التي تتجاوز القيمة القصوى إلى القيمة الدنيا، كما هو الحال في الساعة التي تنتقل من 12 إلى 1. في الأجهزة، يمكن تنفيذ الحساب النمطي بحد أدنى صفر وحد أقصى r n − 1، حيث r هو الأساس ، ببساطة عن طريق حذف جميع الأرقام باستثناء أصغر n رقم. بالنسبة للأجهزة الثنائية، التي تُشكّل الغالبية العظمى من الأجهزة الحديثة، يكون الأساس 2، والأرقام عبارة عن بتات.

مع ذلك، ورغم صعوبة تطبيقها، تتمتع حسابات التشبع بمزايا عملية عديدة. فالنتيجة تكون أقرب ما يمكن إلى الإجابة الصحيحة عدديًا؛ ففي الحساب الثنائي ذي 8 بتات، عندما تكون الإجابة الصحيحة 130، يكون الحصول على إجابة 127 من حسابات التشبع أقل إثارة للدهشة بكثير من الحصول على إجابة -126 من الحساب النمطي. وبالمثل، في الحساب الثنائي ذي 8 بتات، عندما تكون الإجابة الصحيحة 258، يكون الحصول على إجابة 255 من حسابات التشبع أقل إثارة للدهشة من الحصول على إجابة 2 من الحساب النمطي.

كما أن الحساب التشبعي يسمح باكتشاف تجاوز عمليات الجمع والضرب باستمرار دون بت تجاوز أو حساب مفرط، وذلك عن طريق مقارنة بسيطة مع القيمة القصوى أو الدنيا (شريطة ألا يُسمح للبيانات بأخذ هذه القيم).

تم قص الإشارة فوق قيم معينة

بالإضافة إلى ذلك، تُمكّن حسابات التشبع من تطوير خوارزميات فعّالة للعديد من المشكلات، لا سيما في معالجة الإشارات الرقمية . على سبيل المثال، قد يؤدي تعديل مستوى صوت الإشارة إلى حدوث تجاوز، ويُسبب التشبع تشويهاً أقل بكثير للصوت مقارنةً بالتشويه المحيطي. وكما ذكر الباحثون جي. إيه. كونستانتينيدس وآخرون: [ 1 ]

عند جمع عددين باستخدام تمثيل المتمم الثنائي، ينتج عن تجاوز السعة ظاهرة "الالتفاف". وقد يؤدي ذلك إلى انخفاض كارثي في ​​نسبة الإشارة إلى الضوضاء في نظام معالجة الإشارات الرقمية. لذا، عادةً ما تُقاس الإشارات في تصميمات معالجة الإشارات الرقمية بشكل مناسب لتجنب تجاوز السعة لجميع متجهات الإدخال باستثناء المتجهات المتطرفة، أو تُنتج باستخدام مكونات حسابية مشبعة.

التطبيقات

تتوفر عمليات الحساب التشبعي على العديد من المنصات الحديثة، وكانت على وجه الخصوص إحدى الإضافات التي قدمتها Intel MMX خصيصًا لتطبيقات معالجة الإشارات. كما تتوفر هذه الوظيفة بإصدارات أوسع في مجموعتي تعليمات SSE2 و AVX2 للأعداد الصحيحة، بالإضافة إلى مجموعة تعليمات ARM NEON .

تم تطبيق حسابات التشبع للأعداد الصحيحة في برامج لعدد من لغات البرمجة، بما في ذلك C و C++ ، مثل مجموعة مترجمات GNU [ 2 ] و LLVM IR و Eiffel و Zig . أُضيف دعم حسابات التشبع إلى مكتبة C++ القياسية منذ إصدار C++26 . يساعد هذا المبرمجين على توقع آثار تجاوز السعة وفهمها بشكل أفضل، وفي حالة المترجمات، عادةً ما يختار الحل الأمثل.

يُعدّ تنفيذ عملية التشبع بكفاءة في البرمجيات على جهاز لا يدعم سوى العمليات الحسابية المعيارية تحديًا، نظرًا لأن التطبيقات البسيطة تتطلب تفرعات تُسبب تأخيرات كبيرة في مسار المعالجة. مع ذلك، يُمكن تنفيذ عمليات الجمع والطرح المُشبعة برمجيًا دون تفرعات ، باستخدام العمليات الحسابية المعيارية والعمليات المنطقية على مستوى البتات المتوفرة في جميع وحدات المعالجة المركزية الحديثة وأسلافها، بما في ذلك جميع وحدات المعالجة المركزية x86 (وصولًا إلى Intel 8086 الأصلي ) وبعض وحدات المعالجة المركزية 8 بت الشائعة (التي يُنفذ بعضها مجموعة تعليمات Z80 ) والتي لا تزال قيد الإنتاج. من ناحية أخرى، في وحدات المعالجة المركزية البسيطة 8 بت و16 بت، قد تكون خوارزمية التفرع أسرع إذا تمت برمجتها بلغة التجميع، نظرًا لعدم وجود مسارات معالجة قد تُسبب توقفًا، ولأن كل تعليمة تستغرق دائمًا عدة دورات ساعة. في x86، الذي يوفر علامات تجاوز السعة والحركات الشرطية ، يُمكن كتابة كود بسيط جدًا بدون تفرعات. [ 3 ]

على الرغم من أن حساب التشبع أقل شيوعًا في العمليات الحسابية للأعداد الصحيحة في الأجهزة، فإن معيار IEEE للفاصلة العائمة ، وهو أكثر أنواع التجريد شيوعًا للتعامل مع الأعداد الحقيقية التقريبية ، يستخدم شكلًا من أشكال التشبع حيث يتم تحويل الفائض إلى "لانهاية" أو "لانهاية سالبة"، وتستمر أي عملية أخرى على هذه النتيجة في إنتاج القيمة نفسها. يتميز هذا عن التشبع البسيط بأن العمليات اللاحقة التي تُقلل القيمة لن تُنتج نتيجة "معقولة" مُضللة، كما هو الحال في الحساب.x2-y2{\textstyle {\sqrt {x^{2}-y^{2}}}}. بدلاً من ذلك، قد تكون هناك حالات خاصة مثل "تجاوز الأس" (و"نقص الأس") التي ستستمر بالمثل من خلال العمليات اللاحقة، أو تتسبب في إنهاء فوري، أو يتم اختبارها كما هو الحال IF ACCUMULATOR OVERFLOW ...في FORTRAN لجهاز IBM 704 (أكتوبر 1956).

انظر أيضاً

ملحوظات

  1. في الواقع، يمكن أن تعاني العمليات الحسابية غير المشبعة أيضًا من فشل التجميع والتوزيع في بيئات ذات دقة محدودة، ولكن مثل هذه الإخفاقات تميل إلى أن تكون أقل وضوحًا.

مراجع

  1. GA Constantinides، PYK Cheung، و W. Luk. توليف البنى الحسابية للتشبع .
  2. "مجموعة مترجمات جنو (GCC) الداخلية: الحساب" . وثائق GCC .الميزات المدمجة في جانب اللغة
  3. "الحساب التشبعي بدون فروع" . locklessinc.com . مؤرشف من الأصل بتاريخ 13 فبراير 2019.