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

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


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

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

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

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

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

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

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

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

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

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

कुछ अनुप्रयोगों में असामान्य संख्या से बचने के लिए, या तो स्पष्टता बनाए रखने के लिए, या कुछ प्रोसेसर में प्रदर्शन दंड से बचने के लिए कोड सम्मिलित करने की आवश्यकता होती है। उदाहरण के लिए, ऑडियो प्रसंस्करण अनुप्रयोगों में, असामान्य मान आमतौर पर एक संकेत का इतना शांत प्रतिनिधित्व करते हैं कि यह मानव श्रवण सीमा से बाहर है। इस वजह से, प्रोसेसर पर असामान्य से बचने के लिए एक सामान्य उपाय जहां एक प्रदर्शन जुर्माना होगा, एक बार जब यह असामान्य स्तर पर पहुंच जाता है या एक अत्यंत शांत शोर सिग्नल में मिश्रण होता है, तो सिग्नल को शून्य पर काट दिया जाता है। असामान्य संख्याओं को रोकने के अन्य तरीकों में DC ऑफ़सेट जोड़ना, संख्याओं को परिमाणित करना, Nyquist सिग्नल जोड़ना आदि सम्मिलित हैं। स्ट्रीमिंग SIMD एक्सटेंशन प्रोसेसर एक्सटेंशन के बाद से, इंटेल ने CPU हार्डवेयर में ऐसी कार्यक्षमता प्रदान की है, जो असामान्य संख्याओं को शून्य तक ले जाती है।

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

सक्षम करने का एक गैर-C99-अनुपालन तरीका DAZ और FTZ एसएसई का समर्थन करने वाले लक्ष्यों पर झंडे नीचे दिए गए हैं, लेकिन व्यापक रूप से समर्थित नहीं हैं। यह Mac OS X पर कम से कम 2006 से काम करने के लिए जाना जाता है।

<वाक्यविन्यास प्रकाश लैंग = सी> // डीएजेड और एफटीजेड सेट करता है, अन्य सीएसआर सेटिंग्स को तोड़ता है।
 * 1) सम्मिलित 
 * 2) pragma STDC FENV_ACCESS ON

// 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) // दोनों को अक्षम करें, अन्य सीएसआर सेटिंग्स को क्लॉबरिंग करें।



अन्य x86-SSE प्लेटफ़ॉर्म के लिए जहाँ C लाइब्रेरी ने अभी तक इस ध्वज को लागू नहीं किया है, निम्नलिखित कार्य कर सकते हैं:

<वाक्यविन्यास प्रकाश लैंग = सी> _mm_setcsr(_mm_getcsr | 0x0040); // डीएजेड _mm_setcsr(_mm_getcsr | 0x8000); // एफटीजेड
 * 1) सम्मिलित 

_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);
 * 1) सम्मिलित 

// एफटीजेड को सक्षम करने के लिए _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
 * 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.