असामान्य संख्या

कंप्यूटर विज्ञान में, उप-सामान्य संख्या असामान्य संख्याओं (कभी-कभी denormals कहा जाता है) का सबसेट है जो फ्लोटिंग-पॉइंट अंकगणितीय में शून्य के आसपास अंकगणितीय अंतर्प्रवाह अंतर को भरता है। सबसे छोटी सामान्य संख्या (कंप्यूटिंग) से कम परिमाण वाली कोई भी गैर-शून्य संख्या सबनॉर्मल है।


 * उपयोग नोट: कुछ पुराने दस्तावेज़ों में (विशेष रूप से IEEE 754-1985 और ISO_9899 के प्रारंभिक रिलीज़ जैसे मानक दस्तावेज़ों में), विशेष रूप से सबनॉर्मल नंबरों को संदर्भित करने के लिए डीनॉर्मल का उपयोग किया जाता है। यह उपयोग विभिन्न मानकों के दस्तावेजों में बना रहता है, विशेष रूप से हार्डवेयर पर चर्चा करते समय जो किसी भी अन्य असामान्य संख्या का प्रतिनिधित्व करने में असमर्थ है, लेकिन यहां चर्चा आईईईई 754-2008 के 2008 के संशोधन के अनुरूप असामान्य शब्द का उपयोग करती है।

सामान्य फ़्लोटिंग-पॉइंट अंकगणित में, महत्व में कोई अग्रणी शून्य नहीं है (Mantissa_%28floating_point_number%29); बल्कि, घातांक को समायोजित करके अग्रणी शून्य हटा दिए जाते हैं (उदाहरण के लिए, संख्या 0.0123 को इस रूप में लिखा जाएगा 1.23 × 10−2). इसके विपरीत, एक असामान्य फ़्लोटिंग पॉइंट मान का शून्य के अग्रणी अंक के साथ महत्व होता है। इनमें से, असामान्य संख्याएं उन मूल्यों का प्रतिनिधित्व करती हैं जो सामान्यीकृत होने पर सबसे छोटे प्रतिनिधित्व योग्य एक्सपोनेंट (सीमित सीमा वाले एक्सपोनेंट) के नीचे एक्सपोनेंट होंगे।

आईईईई फ़्लोटिंग-पॉइंट नंबर का महत्व (या मंटिसा) फ़्लोटिंग-पॉइंट नंबर का हिस्सा है जो महत्वपूर्ण आंकड़ों का प्रतिनिधित्व करता है। सकारात्मक सामान्यीकृत संख्या के लिए इसे एम के रूप में दर्शाया जा सकता है0।एम1m2m3...एमp−2mp−1 (जहाँ m एक महत्वपूर्ण अंक का प्रतिनिधित्व करता है, और p परिशुद्धता है) गैर-शून्य m के साथ0. ध्यान दें कि एक बाइनरी मूलांक के लिए, अग्रणी बाइनरी अंक हमेशा 1 होता है। एक असामान्य संख्या में, चूंकि एक्सपोनेंट कम से कम हो सकता है, शून्य प्रमुख महत्वपूर्ण अंक (0.m) है1m2m3...एमp−2mp−1), सबसे छोटी सामान्य संख्या की तुलना में शून्य के करीब संख्याओं का प्रतिनिधित्व करने की अनुमति देता है। फ्लोटिंग-पॉइंट नंबर को सबनॉर्मल के रूप में पहचाना जा सकता है जब भी इसका एक्सपोनेंट कम से कम संभव हो।

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

IEEE 754-2008 में, असामान्य संख्याओं का नाम बदल कर असामान्य संख्याएँ कर दी जाती हैं और इन्हें बाइनरी और दशमलव दोनों स्वरूपों में समर्थित किया जाता है। बाइनरी इंटरचेंज प्रारूपों में, असामान्य संख्याएं 0 के एक्सपोनेंट पूर्वाग्रह के साथ एन्कोड की जाती हैं, लेकिन सबसे छोटे अनुमत एक्सपोनेंट के मान के साथ व्याख्या की जाती है, जो कि एक बड़ा है (यानी, जैसे कि इसे 1 के रूप में एन्कोड किया गया था)। दशमलव इंटरचेंज प्रारूपों में उन्हें किसी विशेष एन्कोडिंग की आवश्यकता नहीं होती है क्योंकि प्रारूप सीधे असामान्य संख्याओं का समर्थन करता है।

गणितीय रूप से बोलते हुए, किसी दिए गए चिह्न (गणित) के सामान्यीकृत फ़्लोटिंग-पॉइंट नंबरों को मोटे तौर पर लॉगरिदमिक रूप से स्थान दिया जाता है, और इस तरह के किसी भी परिमित आकार के सामान्य फ्लोट asymptotic सबनॉर्मल फ़्लोट्स मूल्यों का एक रैखिक रूप से फैला हुआ सेट है, जो नकारात्मक और सकारात्मक सामान्य फ़्लोट्स के बीच के अंतर को फैलाता है।

पृष्ठभूमि
असामान्य संख्याएं गारंटी प्रदान करती हैं कि फ़्लोटिंग-पॉइंट संख्याओं का जोड़ और घटाव कभी भी कम नहीं होता है; पास के दो फ़्लोटिंग-पॉइंट नंबरों में हमेशा एक प्रतिनिधित्व योग्य गैर-शून्य अंतर होता है। क्रमिक अंतर्प्रवाह के बिना, घटाव a − b नीचे प्रवाहित हो सकता है और शून्य उत्पन्न कर सकता है, भले ही मान समान न हों। बदले में, यह शून्य त्रुटियों से विभाजन की ओर ले जा सकता है जो तब नहीं हो सकता जब क्रमिक अंतर्प्रवाह का उपयोग किया जाता है। Intel 8087 में सबनॉर्मल नंबर लागू किए गए थे जबकि IEEE 754 स्टैंडर्ड लिखा जा रहा था। कहन-कूनन-स्टोन प्रारूप में वे अब तक के सबसे विवादास्पद विशेषता थे। के-सी-एस प्रारूप प्रस्ताव जिसे अंततः अपनाया गया था, लेकिन इस कार्यान्वयन ने प्रदर्शित किया कि व्यावहारिक कार्यान्वयन में असामान्य संख्याओं का समर्थन किया जा सकता है। फ्लोटिंग-पॉइंट यूनिट के कुछ कार्यान्वयन सीधे हार्डवेयर में असामान्य संख्या का समर्थन नहीं करते हैं, बल्कि किसी प्रकार के सॉफ़्टवेयर समर्थन के लिए फंस जाते हैं। हालांकि यह उपयोगकर्ता के लिए पारदर्शी हो सकता है, लेकिन इसका परिणाम उन गणनाओं में हो सकता है जो असामान्य संख्याओं का उत्पादन या उपभोग करती हैं जो सामान्य संख्याओं पर समान गणनाओं की तुलना में बहुत धीमी होती हैं।

प्रदर्शन के मुद्दे
कुछ प्रणालियाँ हार्डवेयर में असामान्य मानों को सामान्य मानों की तरह संभालती हैं। अन्य लोग सिस्टम सॉफ़्टवेयर (सहायता) के लिए असामान्य मूल्यों को संभालने के लिए छोड़ देते हैं, केवल सामान्य मूल्यों और हार्डवेयर में शून्य को संभालते हैं। सॉफ्टवेयर में असामान्य मूल्यों को संभालने से हमेशा प्रदर्शन में महत्वपूर्ण कमी आती है। जब हार्डवेयर में उपसामान्य मूल्यों की पूरी तरह से गणना की जाती है, तो सामान्य संख्याओं की तुलना में गति पर उनके प्रसंस्करण की अनुमति देने के लिए कार्यान्वयन तकनीकें मौजूद होती हैं। हालाँकि, कई आधुनिक x86 प्रोसेसर पर गणना की गति काफी कम रहती है; अत्यधिक मामलों में, निर्देश (कंप्यूटर विज्ञान) जिसमें असामान्य ऑपरेंड शामिल हैं, 100 से अधिक अतिरिक्त घड़ी चक्र ले सकते हैं, जिससे सबसे तेज़ निर्देश छह गुना धीमी गति से चलते हैं। यह गति अंतर एक सुरक्षा जोखिम हो सकता है। शोधकर्ताओं ने दिखाया कि यह एक टाइमिंग_अटैक प्रदान करता है जो एक दुर्भावनापूर्ण वेब साइट को वेब ब्राउज़र के अंदर किसी अन्य साइट से पृष्ठ सामग्री निकालने की अनुमति देता है। कुछ अनुप्रयोगों में असामान्य संख्या से बचने के लिए, या तो सटीकता बनाए रखने के लिए, या कुछ प्रोसेसर में प्रदर्शन दंड से बचने के लिए कोड शामिल करने की आवश्यकता होती है। उदाहरण के लिए, ऑडियो प्रसंस्करण अनुप्रयोगों में, असामान्य मान आमतौर पर एक संकेत का इतना शांत प्रतिनिधित्व करते हैं कि यह मानव श्रवण सीमा से बाहर है। इस वजह से, प्रोसेसर पर सबनॉर्मल से बचने के लिए एक सामान्य उपाय जहां एक प्रदर्शन जुर्माना होगा, एक बार जब यह असामान्य स्तर पर पहुंच जाता है या एक अत्यंत शांत शोर सिग्नल में मिश्रण होता है, तो सिग्नल को शून्य पर काट दिया जाता है। असामान्य संख्याओं को रोकने के अन्य तरीकों में DC ऑफ़सेट जोड़ना, संख्याओं को परिमाणित करना, Nyquist सिग्नल जोड़ना आदि शामिल हैं। स्ट्रीमिंग SIMD एक्सटेंशन प्रोसेसर एक्सटेंशन के बाद से, Intel ने CPU हार्डवेयर में ऐसी कार्यक्षमता प्रदान की है, जो उपसामान्य संख्याओं को शून्य तक ले जाती है।

इंटेल एसएसई
इंटेल के सी और फोरट्रान कंपाइलर सक्षम करते हैं DAZ (डीनॉर्मल्स-शून्य-शून्य) और FTZ (फ्लश-टू-जीरो) Streaming_SIMD_Extensions के लिए डिफ़ॉल्ट रूप से ऊपर के अनुकूलन स्तरों के लिए फ़्लैग करता है -O0. का असर DAZ फ्लोटिंग-पॉइंट ऑपरेशंस को शून्य के रूप में असामान्य इनपुट तर्कों का इलाज करना है, और इसका प्रभाव FTZ संचालन के लिए एक असामान्य फ्लोट के बजाय शून्य वापस करना है, जिसके परिणामस्वरूप एक असामान्य फ्लोट होगा, भले ही इनपुट तर्क स्वयं असामान्य न हों। बजना और जीएनयू कंपाइलर संग्रह में प्लेटफ़ॉर्म और अनुकूलन स्तर के आधार पर अलग-अलग डिफ़ॉल्ट अवस्थाएँ होती हैं।

सक्षम करने का एक गैर-C99-अनुपालन तरीका DAZ और FTZ एसएसई का समर्थन करने वाले लक्ष्यों पर झंडे नीचे दिए गए हैं, लेकिन व्यापक रूप से समर्थित नहीं हैं। यह Mac OS X पर कम से कम 2006 से काम करने के लिए जाना जाता है। <वाक्यविन्यास प्रकाश लैंग = सी> // डीएजेड और एफटीजेड सेट करता है, अन्य सीएसआर सेटिंग्स को तोड़ता है। // https://opensource.apple.com/source/Libm/Libm-287.1/Source/Intel/, fenv.c और fenv.h देखें। fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV); // fesetenv(FE_DFL_ENV) // दोनों को अक्षम करें, अन्य सीएसआर सेटिंग्स को क्लॉबरिंग करें। 
 * 1) शामिल 
 * 2) pragma STDC FENV_ACCESS ON

अन्य x86-SSE प्लेटफ़ॉर्म के लिए जहाँ C लाइब्रेरी ने अभी तक इस ध्वज को लागू नहीं किया है, निम्नलिखित कार्य कर सकते हैं: <वाक्यविन्यास प्रकाश लैंग = सी> _mm_setcsr(_mm_getcsr | 0x0040); // डीएजेड _mm_setcsr(_mm_getcsr | 0x8000); // एफटीजेड _mm_setcsr(_mm_getcsr | 0x8040); // दोनों _mm_setcsr(_mm_getcsr & ~0x8040); // दोनों को अक्षम करें  _MM_SET_DENORMALS_ZERO_MODE }} और _MM_SET_FLUSH_ZERO_MODE उपरोक्त कोड के लिए मैक्रोज़ एक अधिक पठनीय इंटरफ़ेस लपेटते हैं। <वाक्यविन्यास प्रकाश लैंग = सी> // DAZ को सक्षम करने के लिए _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); // एफटीजेड को सक्षम करने के लिए _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); 
 * 1) शामिल 
 * 1) शामिल 
 * 1) शामिल 

अधिकांश कंपाइलर पहले से ही डिफ़ॉल्ट रूप से पिछला मैक्रो प्रदान करेंगे, अन्यथा निम्न कोड स्निपेट का उपयोग किया जा सकता है (FTZ की परिभाषा समान है): <वाक्यविन्यास प्रकाश लैंग = सी>
 * 1) परिभाषित करें _MM_DENORMALS_ZERO_MASK 0x0040
 * 2) परिभाषित करें _MM_DENORMALS_ZERO_ON 0x0040
 * 3) परिभाषित करें _MM_DENORMALS_ZERO_OFF 0x0000


 * 1) define _MM_SET_DENORMALS_ZERO_MODE(मोड) _mm_setcsr((_mm_getcsr & ~_MM_DENORMALS_ZERO_MASK) | (मोड))
 * 2) define _MM_GET_DENORMALS_ZERO_MODE (_mm_getcsr & _MM_DENORMALS_ZERO_MASK)

एप्लिकेशन_बाइनरी_इंटरफेस द्वारा डिफॉल्ट डीनॉर्मलाइजेशन व्यवहार अनिवार्य है, और इसलिए अच्छी तरह से व्यवहार किए गए सॉफ़्टवेयर को कॉल करने वाले या अन्य पुस्तकालयों में कोड को वापस करने से पहले डीनॉर्मलाइज़ेशन मोड को सहेजना और पुनर्स्थापित करना चाहिए।

एआरएम
AArch32 नियॉन (SIMD) FPU हमेशा एक फ्लश-टू-जीरो मोड का उपयोग करता है, जो समान है FTZ + DAZ. स्केलर FPU और AArch64 SIMD में, फ्लश-टू-ज़ीरो व्यवहार वैकल्पिक है और इसके द्वारा नियंत्रित किया जाता है FZ कंट्रोल रजिस्टर का बिट - आर्म32 में FPSCR और AArch64 में FPCR।

कुछ ARM प्रोसेसर में सबनॉर्मल्स की हार्डवेयर हैंडलिंग होती है।

यह भी देखें

 * लघुगणक संख्या प्रणाली

अग्रिम पठन



 * See also various papers on William Kahan's web site for examples of where subnormal numbers help improve the results of calculations.