संतृप्ति अंकगणित

संतृप्ति अंकगणित अंकगणित का एक संस्करण है जिसमें सभी संक्रियाएं, जैसे जोड़ और गुणा, एक न्यूनतम और अधिकतम मान के बीच एक निश्चित सीमा तक सीमित हैं।

यदि किसी ऑपरेशन का परिणाम अधिकतम से अधिक है, तो इसे (क्लैम्पिंग (ग्राफिक्स)) अधिकतम पर स्थित किया जाता है; यदि यह न्यूनतम से नीचे है, तो इसे न्यूनतम पर दबा दिया जाता है। यह नाम इस बात से आता है कि चरम मान तक पहुँचने के बाद मान कैसे संतृप्त हो जाता है; अधिकतम में और जोड़ या न्यूनतम से घटाव परिणाम को नहीं बदलता है ।

उदाहरण के लिए, यदि मानों की मान्य श्रेणी -100 से 100 तक है, तो निम्नलिखित संतृप्त अंकगणितीय संक्रियाएँ निम्नलिखित मान उत्पन्न करती हैं: यहां 'संतृप्त घटाव' के लिए एक और उदाहरण दिया गया है, जब मान्य सीमा 0 से 100 के अतिरिक्त है:
 * 60 + 30 → 90।
 * 60 + 43 → 100. ('नहीं अपेक्षित 103.)
 * (60 + 43) - (75 + 25) → 0. (नहीं अपेक्षित 3.) (100 - 100 → 0.)
 * 10 × 11 → 100. ('नहीं अपेक्षित 110.)
 * 99 × 99 → 100. ('नहीं अपेक्षित 9801.)
 * 30 × (5 − 1) → 100. ('नहीं अपेक्षित 120.) (30 × 4 → 100.)
 * (30 × 5) − (30 × 1) → 70।
 * 30 - 60 → 0. (नहीं अपेक्षित -30.)

जैसा कि इन उदाहरणों से देखा जा सकता है, संतृप्ति अंकगणित में सहचारिता और वितरण जैसे परिचित गुण विफल हो सकते हैं। यह अमूर्त गणित से निपटने के लिए अप्रिय बनाता है, किंतु डिजिटल हार्डवेयर और कलन विधि में इसकी महत्वपूर्ण भूमिका होती है, जहां मानो की अधिकतम और न्यूनतम प्रतिनिधित्व योग्य सीमा होती है।

आधुनिक उपयोग
सामान्यतः सामान्य प्रयोजन के माइक्रोप्रोसेसर संतृप्ति अंकगणित का उपयोग करके पूर्णांक अंकगणितीय संचालन को प्रयुक्त नहीं करते हैं; इसके अतिरिक्त वे आसान-से-कार्यान्वित मॉड्यूलर अंकगणित का उपयोग करते हैं, जिसमें अधिकतम मान पूर्णांक से अधिक मान न्यूनतम मान पर अतिप्रवाह होता है, जैसे कि 12 से 1 तक जाने वाली घड़ी पर घंटे हार्डवेयर में, न्यूनतम शून्य के साथ मॉड्यूलर अंकगणित और अधिकतम rn − 1, जहां r मूलांक है, केवल सबसे कम n अंकों को छोड़कर सभी को हटाकर प्रयुक्त किया जा सकता है। बाइनरी हार्डवेयर के लिए, जो आधुनिक हार्डवेयर का विशाल बहुमत है, रेडिक्स 2 है और अंक बिट्स हैं।

चूँकि इसे प्रयुक्त करना अधिक कठिन है, संतृप्ति अंकगणित के कई व्यावहारिक लाभ हैं। परिणाम संख्यात्मक रूप से यथासंभव सही उत्तर के समीप है; 8-बिट बाइनरी हस्ताक्षरित अंकगणित के लिए, जब सही उत्तर 130 है, तो मॉड्यूलर अंकगणित से -126 का उत्तर प्राप्त करने की तुलना में संतृप्त अंकगणित से 127 का उत्तर प्राप्त करना अधिकत्तर कम आश्चर्यजनक है। इसी तरह, 8-बिट बाइनरी अहस्ताक्षरित अंकगणित के लिए जब सही उत्तर 258 है, तो मॉड्यूलर अंकगणित से 2 का उत्तर प्राप्त करने की तुलना में संतृप्त अंकगणित से 255 का उत्तर प्राप्त करना कम आश्चर्यजनक है।

संतृप्ति अंकगणित अधिकतम या न्यूनतम मान के साथ सरल तुलना द्वारा अतिप्रवाह बिट या अत्यधिक संगणना के बिना लगातार परिवर्धन और गुणन के अतिप्रवाह को सक्षम बनाता है (परंतु इन मानो को लेने के लिए डेटा की अनुमति नहीं है)।

इसके अतिरिक्त संतृप्ति अंकगणित विशेष रूप से अंकीय संकेत प्रक्रिया में कई समस्याओं के लिए कुशल एल्गोरिदम को सक्षम बनाता है। उदाहरण के लिए, ध्वनि संकेत के वॉल्यूम स्तर को समायोजित करने से अतिप्रवाह हो सकता है और संतृप्ति रैप-अराउंड की तुलना में ध्वनि में अधिकत्तर कम विकृति का कारण बनती है। शोधकर्ताओं जी ए कॉन्स्टेंटिनाइड्स एट अल के शब्दों में: "दो के पूरक प्रतिनिधित्व का उपयोग करते हुए दो संख्याओं को जोड़ने पर, अतिप्रवाह का परिणाम "रैप-अराउंड" घटना में होता है। परिणाम एक डीएसपी प्रणाली में संकेत -से -ध्वनि अनुपात में विनाशकारी हानि हो सकता है। इसलिए डीएसपी डिजाइनों में संकेत सामान्यतः या तो उचित रूप से स्केल किए जाते हैं जिससे अतिप्रवाह इनपुट वैक्टर को छोड़कर सभी के लिए अतिप्रवाह से बचा जा सके, या संतृप्ति अंकगणितीय घटकों का उपयोग करके उत्पादित किया जा सकता है ।"

कार्यान्वयन
संतृप्ति अंकगणितीय संचालन कई आधुनिक प्लेटफार्मों पर उपलब्ध हैं, और विशेष रूप से इंटेल एमएमएक्स (निर्देश सेट) प्लेटफॉर्म द्वारा किए गए विस्तार में से एक था, विशेष रूप से ऐसे संकेत -प्रोसेसिंग अनुप्रयोगों के लिए यह कार्यक्षमता एसएसई2 और एवीएक्स2 पूर्णांक निर्देश समूहों में व्यापक संस्करणों में भी उपलब्ध है।

पूर्णांकों के लिए संतृप्ति अंकगणित को सॉफ्टवेयर में C (प्रोग्रामिंग भाषा ), C++, जैसे कि जीएनयू संकलक संग्रह, सहित सी (प्रोग्रामिंग भाषा) के लिए भी प्रयुक्त किया गया है। एलएलवीएम आईआर, और एफिल (प्रोग्रामिंग भाषा) यह प्रोग्रामर को अतिप्रवाह के प्रभावों को उत्तम विधि से समझने और समझने में सहायता करता है और कंपाइलर्स के स्थति में सामान्यतः इष्टतम समाधान चुनते हैं।

केवल मॉड्यूलर अंकगणितीय संचालन के साथ मशीन पर सॉफ्टवेयर में कुशलतापूर्वक प्रयुक्त करने के लिए संतृप्ति चुनौतीपूर्ण है, क्योंकि सरल कार्यान्वयन के लिए शाखाओं की आवश्यकता होती है जो बड़ी पाइपलाइन देरी उत्पन्न करती हैं। चूँकि सॉफ्टवेयर शाखा (कंप्यूटर विज्ञान) या शाखा-मुक्त कोड में संतृप्त जोड़ और घटाव को प्रयुक्त करना संभव है केवल मॉड्यूलर अंकगणित और बिटवाइज़ लॉजिकल ऑपरेशंस का उपयोग करके जो सभी आधुनिक सीपीयू और उनके पूर्ववर्तियों पर उपलब्ध हैं, जिनमें सभी x86 सीपीयू सम्मिलित हैं (बैक से) मूल इंटेल8086) और कुछ लोकप्रिय 8-बिट सीपीयू(जिनमें से कुछ जैसे ज़ाइलॉगZ80 अभी भी उत्पादन में हैं)। दूसरी ओर सरल 8-बिट और 16-बिट सीपीयू पर असेंबली में प्रोग्राम किए जाने पर ब्रांचिंग एल्गोरिदम वास्तव में तेज़ हो सकता है, क्योंकि स्टाल करने के लिए कोई पाइपलाइन नहीं होती है और प्रत्येक निर्देश सदैव कई घड़ी चक्र लेता है। X86 पर, जो अतिप्रवाह झंडे और सशर्त चाल प्रदान करता है, बहुत सरल शाखा-मुक्त कोड संभव है।

चूँकि संतृप्ति अंकगणित हार्डवेयर में पूर्णांक अंकगणित के लिए कम लोकप्रिय है, आईईईई फ़्लोटिंग-पॉइंट मानक, अनुमानित वास्तविक संख्याओं से निपटने के लिए सबसे लोकप्रिय अमूर्तता संतृप्ति के एक रूप का उपयोग करता है जिसमें अतिप्रवाह को अनंत या नकारात्मक अनंत में परिवर्तित किया जाता है और कोई अन्य ऑपरेशन इस परिणाम पर एक ही मान का उत्पादन जारी है। सरल संतृप्ति पर इसका लाभ यह है कि मान घटाने के बाद के संचालन एक भ्रामक रूप से उचित परिणाम उत्पन्न नहीं करेंगे, जैसे गणना में $\sqrt{x^2 - y^2}$. वैकल्पिक रूप से, प्रतिपादक अतिप्रवाह (और एक्सपोनेंट अंडरफ्लो) जैसे विशेष अवस्था हो सकते हैं जो इसी तरह बाद के संचालन के माध्यम से बने रहेंगे, या तत्काल समाप्ति का कारण बनेंगे, या इसके लिए परीक्षण किया जाएगा  जैसा कि आईबीएम704 (अक्टूबर 1956) के लिए फोरट्रान में है।

यह भी देखें

 * सेंसर करना (सांख्यिकी)

बाहरी संबंध

 * SARITH: Safe ARITHmetic – A Progress Report: Report on a saturation arithmetic component for Eiffel.
 * saturating, a header-only C++ library for saturating arithmethic in terms of GCC Overflow builtins.