निश्चित-बिंदु अंकगणित: Difference between revisions
(Created page with "{{short description|Computer format for representing real numbers}} {{about|fixed-precision fractions|the invariant points of a function|Fixed point (mathematics)}} {{Original...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{short description|Computer format for representing real numbers}} | {{short description|Computer format for representing real numbers}} | ||
{{about|fixed-precision fractions|the invariant points of a function|Fixed point (mathematics)}} | {{about|fixed-precision fractions|the invariant points of a function|Fixed point (mathematics)}} | ||
[[ कम्प्यूटिंग ]] में, निश्चित-बिंदु भिन्न (गणित) | भिन्नात्मक (गैर-पूर्णांक) संख्याओं को उनके भिन्नात्मक भाग के अंकों की | |||
[[ कम्प्यूटिंग ]] में, निश्चित-बिंदु भिन्न (गणित) | भिन्नात्मक (गैर-पूर्णांक) संख्याओं को उनके भिन्नात्मक भाग के अंकों की निश्चित संख्या को संग्रहीत करके प्रदर्शित करने की विधि है। उदाहरण के लिए, [[अमेरिकी डॉलर]] की रकम को अक्सर दो आंशिक अंकों के साथ संग्रहित किया जाता है, जो [[सेंट (मुद्रा)]] (डॉलर का 1/100) का प्रतिनिधित्व करते हैं। अधिक आम तौर पर, यह शब्द कुछ निश्चित छोटी इकाई के पूर्णांक गुणकों के रूप में भिन्नात्मक मानों का प्रतिनिधित्व करने का उल्लेख कर सकता है, उदाहरण के लिए दस मिनट के अंतराल के पूर्णांक गुणज के रूप में घंटों की आंशिक राशि। निश्चित-बिंदु संख्या प्रतिनिधित्व अक्सर अधिक जटिल और कम्प्यूटेशनल रूप से मांग वाले [[फ़्लोटिंग-पॉइंट अंकगणित]] | फ़्लोटिंग-पॉइंट प्रतिनिधित्व के विपरीत होता है। | |||
निश्चित-बिंदु प्रतिनिधित्व में, अंश को अक्सर पूर्णांक भाग के समान [[मूलांक]] में व्यक्त किया जाता है, लेकिन आधार ''बी'' के नकारात्मक [[घातांक]] का उपयोग करके। सबसे आम प्रकार [[दशमलव]] (आधार 10) और [[बाइनरी संख्या]] (आधार 2) हैं। उत्तरार्द्ध को आमतौर पर बाइनरी स्केलिंग के रूप में भी जाना जाता है। इस प्रकार, यदि ''n'' भिन्न अंक संग्रहीत हैं, तो मान हमेशा ''b'' का पूर्णांक गुणज (गणित) होगा<sup>−n</sup>. निश्चित-बिंदु प्रतिनिधित्व का उपयोग पूर्णांक मानों के निम्न-क्रम अंकों को छोड़ने के लिए भी किया जा सकता है, उदाहरण के लिए जब बड़े डॉलर मूल्यों को $1000 के गुणज के रूप में दर्शाया जाता है। | निश्चित-बिंदु प्रतिनिधित्व में, अंश को अक्सर पूर्णांक भाग के समान [[मूलांक]] में व्यक्त किया जाता है, लेकिन आधार ''बी'' के नकारात्मक [[घातांक]] का उपयोग करके। सबसे आम प्रकार [[दशमलव]] (आधार 10) और [[बाइनरी संख्या]] (आधार 2) हैं। उत्तरार्द्ध को आमतौर पर बाइनरी स्केलिंग के रूप में भी जाना जाता है। इस प्रकार, यदि ''n'' भिन्न अंक संग्रहीत हैं, तो मान हमेशा ''b'' का पूर्णांक गुणज (गणित) होगा<sup>−n</sup>. निश्चित-बिंदु प्रतिनिधित्व का उपयोग पूर्णांक मानों के निम्न-क्रम अंकों को छोड़ने के लिए भी किया जा सकता है, उदाहरण के लिए जब बड़े डॉलर मूल्यों को $1000 के गुणज के रूप में दर्शाया जाता है। | ||
Line 32: | Line 30: | ||
| 314.160|| 31416 | | 314.160|| 31416 | ||
|} | |} | ||
भिन्नात्मक संख्या का | भिन्नात्मक संख्या का निश्चित-बिंदु प्रतिनिधित्व अनिवार्य रूप से [[पूर्णांक]] है जिसे निश्चित स्केलिंग कारक द्वारा अंतर्निहित रूप से गुणा किया जाना है। उदाहरण के लिए, मान 1.23 को 1/1000 के अंतर्निहित स्केलिंग कारक के साथ पूर्णांक मान 1230 के रूप में चर में संग्रहीत किया जा सकता है (जिसका अर्थ है कि अंतिम 3 दशमलव अंकों को परोक्ष रूप से दशमलव अंश माना जाता है), और मान {{thinspace|1|230|000}} को 1000 के अंतर्निहित स्केलिंग कारक के साथ 1230 के रूप में दर्शाया जा सकता है (शून्य से 3 निहित दशमलव अंश अंकों के साथ, यानी दाईं ओर 3 अंतर्निहित शून्य अंकों के साथ)। यह प्रतिनिधित्व मानक पूर्णांक [[अंकगणितीय तर्क इकाई]] को [[तर्कसंगत संख्या]] गणना करने की अनुमति देता है। | ||
नकारात्मक मान आमतौर पर बाइनरी फिक्स्ड-पॉइंट प्रारूप में उपरोक्त के रूप में | नकारात्मक मान आमतौर पर बाइनरी फिक्स्ड-पॉइंट प्रारूप में उपरोक्त के रूप में अंतर्निहित स्केलिंग कारक के साथ दो के पूरक प्रतिनिधित्व में हस्ताक्षरित पूर्णांक के रूप में दर्शाए जाते हैं। मान का चिह्न हमेशा [[ बिट क्रमांकन ]] (1 = नकारात्मक, 0 = गैर-नकारात्मक) द्वारा दर्शाया जाएगा, भले ही अंश बिट्स की संख्या बिट्स की कुल संख्या से अधिक या उसके बराबर हो। उदाहरण के लिए, 8-बिट हस्ताक्षरित बाइनरी पूर्णांक (11110101)<sub>2</sub> = −11, -3, +5, और +12 निहित अंश बिट्स के साथ लिया गया, मान −11/2 का प्रतिनिधित्व करेगा<sup>−3</sup> = −88, −11/2<sup>5</sup> = −0.{{thinspace|343|75}}, और −11/2<sup>12</sup> = −0.{{thinspace|002|685|546|875}}, क्रमश। | ||
वैकल्पिक रूप से, नकारात्मक मानों को संकेत-परिमाण प्रारूप में | वैकल्पिक रूप से, नकारात्मक मानों को संकेत-परिमाण प्रारूप में पूर्णांक द्वारा दर्शाया जा सकता है, जिस स्थिति में संकेत को कभी भी निहित अंश बिट्स की संख्या में शामिल नहीं किया जाता है। यह संस्करण आमतौर पर दशमलव निश्चित-बिंदु अंकगणित में अधिक उपयोग किया जाता है। इस प्रकार हस्ताक्षरित 5-अंकीय दशमलव पूर्णांक (−00025)<sub>10</sub>, -3, +5, और +12 निहित दशमलव अंश अंकों के साथ लिया गया, मान -25/10 का प्रतिनिधित्व करेगा<sup>−3</sup> = −25000, −25/10<sup>5</sup> = −0.00025, और −25/10<sup>12</sup> = −0.{{thinspace|000|000|000|025}}, क्रमश। | ||
एक प्रोग्राम आमतौर पर यह मान लेगा कि सभी निश्चित-बिंदु मान जो किसी दिए गए चर में संग्रहीत किए जाएंगे, या किसी दिए गए निर्देश (कंप्यूटिंग) द्वारा उत्पादित किए जाएंगे, उनका स्केलिंग कारक समान होगा। यह पैरामीटर आमतौर पर प्रोग्रामर द्वारा आवश्यक सटीकता और परिशुद्धता और संग्रहीत किए जाने वाले मानों की सीमा के आधार पर चुना जा सकता है। | एक प्रोग्राम आमतौर पर यह मान लेगा कि सभी निश्चित-बिंदु मान जो किसी दिए गए चर में संग्रहीत किए जाएंगे, या किसी दिए गए निर्देश (कंप्यूटिंग) द्वारा उत्पादित किए जाएंगे, उनका स्केलिंग कारक समान होगा। यह पैरामीटर आमतौर पर प्रोग्रामर द्वारा आवश्यक सटीकता और परिशुद्धता और संग्रहीत किए जाने वाले मानों की सीमा के आधार पर चुना जा सकता है। | ||
किसी चर या सूत्र का स्केलिंग कारक प्रोग्राम में स्पष्ट रूप से प्रकट नहीं हो सकता है। [[सॉफ्टवेयर इंजीनियरिंग]] के लिए आवश्यक है कि इसे [[सॉफ़्टवेयर दस्तावेज़ीकरण]] में, कम से कम स्रोत कोड में | किसी चर या सूत्र का स्केलिंग कारक प्रोग्राम में स्पष्ट रूप से प्रकट नहीं हो सकता है। [[सॉफ्टवेयर इंजीनियरिंग]] के लिए आवश्यक है कि इसे [[सॉफ़्टवेयर दस्तावेज़ीकरण]] में, कम से कम स्रोत कोड में [[टिप्पणी (कंप्यूटिंग)]] के रूप में प्रदान किया जाए। | ||
===स्केलिंग कारकों का चयन=== | ===स्केलिंग कारकों का चयन=== | ||
अधिक दक्षता के लिए, स्केलिंग कारकों को अक्सर आंतरिक रूप से पूर्णांकों का प्रतिनिधित्व करने के लिए उपयोग किए जाने वाले आधार बी के घातांक (सकारात्मक या नकारात्मक) के रूप में चुना जाता है। हालाँकि, अक्सर सबसे अच्छा स्केलिंग कारक एप्लिकेशन द्वारा निर्धारित होता है। इस प्रकार व्यक्ति अक्सर मानवीय सुविधा के लिए 10 की घात वाले स्केलिंग कारकों का उपयोग करता है (उदाहरण के लिए डॉलर के मूल्यों के लिए 1/100), तब भी जब पूर्णांकों को बाइनरी में आंतरिक रूप से दर्शाया जाता है। दशमलव स्केलिंग कारक भी [[इकाइयों की अंतर्राष्ट्रीय प्रणाली]] | मीट्रिक (एसआई) प्रणाली के साथ अच्छी तरह से मेल खाते हैं, क्योंकि निश्चित-बिंदु स्केलिंग कारक की पसंद अक्सर माप की | अधिक दक्षता के लिए, स्केलिंग कारकों को अक्सर आंतरिक रूप से पूर्णांकों का प्रतिनिधित्व करने के लिए उपयोग किए जाने वाले आधार बी के घातांक (सकारात्मक या नकारात्मक) के रूप में चुना जाता है। हालाँकि, अक्सर सबसे अच्छा स्केलिंग कारक एप्लिकेशन द्वारा निर्धारित होता है। इस प्रकार व्यक्ति अक्सर मानवीय सुविधा के लिए 10 की घात वाले स्केलिंग कारकों का उपयोग करता है (उदाहरण के लिए डॉलर के मूल्यों के लिए 1/100), तब भी जब पूर्णांकों को बाइनरी में आंतरिक रूप से दर्शाया जाता है। दशमलव स्केलिंग कारक भी [[इकाइयों की अंतर्राष्ट्रीय प्रणाली]] | मीट्रिक (एसआई) प्रणाली के साथ अच्छी तरह से मेल खाते हैं, क्योंकि निश्चित-बिंदु स्केलिंग कारक की पसंद अक्सर माप की इकाई (जैसे [[मीटर]] के बजाय [[सेंटीमीटर]] या [[माइक्रोमीटर]]) की पसंद के बराबर होती है। | ||
हालाँकि, अन्य स्केलिंग कारकों का उपयोग कभी-कभी किया जा सकता है, जैसे घंटों की आंशिक मात्रा को सेकंड की पूर्णांक संख्या के रूप में दर्शाया जा सकता है; अर्थात् 1/3600 के स्केल फैक्टर के साथ | हालाँकि, अन्य स्केलिंग कारकों का उपयोग कभी-कभी किया जा सकता है, जैसे घंटों की आंशिक मात्रा को सेकंड की पूर्णांक संख्या के रूप में दर्शाया जा सकता है; अर्थात् 1/3600 के स्केल फैक्टर के साथ निश्चित-बिंदु संख्या के रूप में। | ||
यहां तक कि सबसे सावधानीपूर्वक गोलाई के साथ, स्केलिंग कारक एस के साथ दर्शाए गए निश्चित-बिंदु मानों में संग्रहीत पूर्णांक में ±0.5 तक की त्रुटि हो सकती है, यानी मान में ±0.5 एस। इसलिए, छोटे स्केलिंग कारक आम तौर पर अधिक सटीक परिणाम उत्पन्न करते हैं। | यहां तक कि सबसे सावधानीपूर्वक गोलाई के साथ, स्केलिंग कारक एस के साथ दर्शाए गए निश्चित-बिंदु मानों में संग्रहीत पूर्णांक में ±0.5 तक की त्रुटि हो सकती है, यानी मान में ±0.5 एस। इसलिए, छोटे स्केलिंग कारक आम तौर पर अधिक सटीक परिणाम उत्पन्न करते हैं। | ||
दूसरी ओर, | दूसरी ओर, छोटे स्केलिंग कारक का मतलब मूल्यों की छोटी श्रृंखला है जिसे किसी दिए गए प्रोग्राम चर में संग्रहीत किया जा सकता है। अधिकतम निश्चित-बिंदु मान जिसे चर में संग्रहीत किया जा सकता है वह सबसे बड़ा पूर्णांक मान है जिसे इसमें संग्रहीत किया जा सकता है, स्केलिंग कारक द्वारा गुणा किया जा सकता है; और इसी प्रकार न्यूनतम मूल्य के लिए भी। उदाहरण के लिए, नीचे दी गई तालिका निहित स्केलिंग कारक एस, न्यूनतम और अधिकतम प्रतिनिधित्व योग्य मान वी देती है<sub>min</sub> और वी<sub>max</sub>, और मूल्यों की सटीकता δ = S/2 जिसे 16-बिट हस्ताक्षरित बाइनरी निश्चित बिंदु प्रारूप में दर्शाया जा सकता है, जो निहित अंश बिट्स की संख्या f पर निर्भर करता है। | ||
{| class= "wikitable" style="margin:0 0 0 1em; float:center;" | {| class= "wikitable" style="margin:0 0 0 1em; float:center;" | ||
|+ Parameters of some 16-bit signed binary fixed-point formats | |+ Parameters of some 16-bit signed binary fixed-point formats | ||
Line 79: | Line 77: | ||
इसी प्रकार, कोई भी दशमलव अंश a/10<sup>एम</sup>, जैसे कि 1/100 या 37/1000, को पावर-दस स्केलिंग फैक्टर 1/10 के साथ निश्चित बिंदु में सटीक रूप से दर्शाया जा सकता है<sup>n</sup>किसी भी n ≥ m के साथ। यह दशमलव प्रारूप किसी बाइनरी अंश a/2 का भी प्रतिनिधित्व कर सकता है<sup>मी</sup>, जैसे 1/8 (0.125) या 17/32 (0.53125)। | इसी प्रकार, कोई भी दशमलव अंश a/10<sup>एम</sup>, जैसे कि 1/100 या 37/1000, को पावर-दस स्केलिंग फैक्टर 1/10 के साथ निश्चित बिंदु में सटीक रूप से दर्शाया जा सकता है<sup>n</sup>किसी भी n ≥ m के साथ। यह दशमलव प्रारूप किसी बाइनरी अंश a/2 का भी प्रतिनिधित्व कर सकता है<sup>मी</sup>, जैसे 1/8 (0.125) या 17/32 (0.53125)। | ||
अधिक आम तौर पर, ए और बी [[सहअभाज्य पूर्णांक]] और बी सकारात्मक के साथ | अधिक आम तौर पर, ए और बी [[सहअभाज्य पूर्णांक]] और बी सकारात्मक के साथ तर्कसंगत संख्या ए/बी को बाइनरी निश्चित बिंदु में सटीक रूप से दर्शाया जा सकता है यदि बी 2 की शक्ति है; और दशमलव निश्चित बिंदु में केवल तभी यदि b में 2 और/या 5 के अलावा कोई [[अभाज्य संख्या]] गुणनखंड न हो। | ||
===फ़्लोटिंग-पॉइंट के साथ तुलना=== | ===फ़्लोटिंग-पॉइंट के साथ तुलना=== | ||
फिक्स्ड-पॉइंट संगणनाएं तेज़ हो सकती हैं और/या फ़्लोटिंग-पॉइंट की तुलना में कम हार्डवेयर का उपयोग कर सकती हैं। यदि प्रस्तुत किए जाने वाले मानों की सीमा पहले से ज्ञात हो और पर्याप्त रूप से सीमित हो, तो निश्चित बिंदु उपलब्ध बिट्स का बेहतर उपयोग कर सकता है। उदाहरण के लिए, यदि 0 और 1 के बीच की संख्या को दर्शाने के लिए 32 बिट उपलब्ध हैं, तो | फिक्स्ड-पॉइंट संगणनाएं तेज़ हो सकती हैं और/या फ़्लोटिंग-पॉइंट की तुलना में कम हार्डवेयर का उपयोग कर सकती हैं। यदि प्रस्तुत किए जाने वाले मानों की सीमा पहले से ज्ञात हो और पर्याप्त रूप से सीमित हो, तो निश्चित बिंदु उपलब्ध बिट्स का बेहतर उपयोग कर सकता है। उदाहरण के लिए, यदि 0 और 1 के बीच की संख्या को दर्शाने के लिए 32 बिट उपलब्ध हैं, तो निश्चित-बिंदु प्रतिनिधित्व में 1.2 × 10 से कम त्रुटि हो सकती है।<sup>−10</sup>, जबकि मानक फ़्लोटिंग-पॉइंट प्रतिनिधित्व में 596 × 10 तक त्रुटि हो सकती है<sup>−10</sup> - क्योंकि 9 बिट्स गतिशील स्केलिंग कारक के संकेत और प्रतिपादक के साथ बर्बाद हो जाते हैं। विशेष रूप से, 32-बिट फिक्स्ड-प्वाइंट की तुलना [[आईईईई 754]]|फ्लोटिंग-प्वाइंट ऑडियो से करने पर, 40 [[डेसिबल]] से कम [[हेडरूम (ऑडियो सिग्नल प्रोसेसिंग)]] की आवश्यकता वाली रिकॉर्डिंग में 32-बिट फिक्स्ड का उपयोग करके उच्च सिग्नल-टू-शोर अनुपात होता है। | ||
फिक्स्ड-पॉइंट गणनाओं का उपयोग करने वाले प्रोग्राम आमतौर पर फ़्लोटिंग-पॉइंट का उपयोग करने वालों की तुलना में अधिक पोर्टेबल होते हैं, क्योंकि वे एफपीयू की उपलब्धता पर निर्भर नहीं होते हैं। आईईईई फ़्लोटिंग पॉइंट मानक को व्यापक रूप से अपनाए जाने से पहले यह लाभ विशेष रूप से मजबूत था, जब | फिक्स्ड-पॉइंट गणनाओं का उपयोग करने वाले प्रोग्राम आमतौर पर फ़्लोटिंग-पॉइंट का उपयोग करने वालों की तुलना में अधिक पोर्टेबल होते हैं, क्योंकि वे एफपीयू की उपलब्धता पर निर्भर नहीं होते हैं। आईईईई फ़्लोटिंग पॉइंट मानक को व्यापक रूप से अपनाए जाने से पहले यह लाभ विशेष रूप से मजबूत था, जब ही डेटा के साथ फ़्लोटिंग-पॉइंट गणना निर्माता के आधार पर और अक्सर कंप्यूटर मॉडल के आधार पर अलग-अलग परिणाम देती थी। | ||
कई एम्बेडेड प्रोसेसर में एफपीयू की कमी होती है, क्योंकि पूर्णांक अंकगणितीय इकाइयों को काफी कम [[ तर्क द्वार ]] की आवश्यकता होती है और एफपीयू की तुलना में बहुत छोटे एकीकृत सर्किट क्षेत्र का उपभोग करते हैं; और कम गति वाले उपकरणों पर फ़्लोटिंग-पॉइंट का सॉफ़्टवेयर [[अनुकरण (कंप्यूटिंग)]] अधिकांश अनुप्रयोगों के लिए बहुत धीमा होगा। पहले के [[ निजी कंप्यूटर ]] और [[गेम कंसोल]] जैसे [[इंटेल 386]] और [[इंटेल 486]] के सीपीयू चिप्स में भी एफपीयू का अभाव था। | कई एम्बेडेड प्रोसेसर में एफपीयू की कमी होती है, क्योंकि पूर्णांक अंकगणितीय इकाइयों को काफी कम [[ तर्क द्वार ]] की आवश्यकता होती है और एफपीयू की तुलना में बहुत छोटे एकीकृत सर्किट क्षेत्र का उपभोग करते हैं; और कम गति वाले उपकरणों पर फ़्लोटिंग-पॉइंट का सॉफ़्टवेयर [[अनुकरण (कंप्यूटिंग)]] अधिकांश अनुप्रयोगों के लिए बहुत धीमा होगा। पहले के [[ निजी कंप्यूटर ]] और [[गेम कंसोल]] जैसे [[इंटेल 386]] और [[इंटेल 486]] के सीपीयू चिप्स में भी एफपीयू का अभाव था। | ||
किसी भी निश्चित-बिंदु प्रारूप का पूर्ण रिज़ॉल्यूशन (क्रमिक मानों के बीच का अंतर) पूरी रेंज पर स्थिर होता है, अर्थात् स्केलिंग कारक एस। इसके विपरीत, फ़्लोटिंग-पॉइंट प्रारूप का सापेक्ष रिज़ॉल्यूशन उनकी पूरी रेंज पर लगभग स्थिर होता है, भीतर बदलता रहता है आधार बी का | किसी भी निश्चित-बिंदु प्रारूप का पूर्ण रिज़ॉल्यूशन (क्रमिक मानों के बीच का अंतर) पूरी रेंज पर स्थिर होता है, अर्थात् स्केलिंग कारक एस। इसके विपरीत, फ़्लोटिंग-पॉइंट प्रारूप का सापेक्ष रिज़ॉल्यूशन उनकी पूरी रेंज पर लगभग स्थिर होता है, भीतर बदलता रहता है आधार बी का कारक; जबकि उनका पूर्ण रिज़ॉल्यूशन परिमाण के कई क्रमों के अनुसार भिन्न होता है, जैसे स्वयं मान। | ||
कई मामलों में, निश्चित-बिंदु गणनाओं की क्वांटिज़ेशन (सिग्नल प्रोसेसिंग) त्रुटियों का विश्लेषण समतुल्य फ़्लोटिंग-पॉइंट गणनाओं की तुलना में आसान होता है। ट्रंकेशन पर रैखिककरण तकनीकों को लागू करना, जैसे कि [[ तड़पना ]]िंग और/या शोर को आकार देना, निश्चित-बिंदु अंकगणित के भीतर अधिक सीधा-आगे है। दूसरी ओर, निश्चित बिंदु के उपयोग के लिए प्रोग्रामर को अधिक देखभाल की आवश्यकता होती है। अतिप्रवाह से बचने के लिए गणना में चर की श्रेणियों और सभी मध्यवर्ती मूल्यों के लिए बहुत सख्त अनुमान की आवश्यकता होती है, और अक्सर उनके स्केलिंग कारकों को समायोजित करने के लिए अतिरिक्त कोड की भी आवश्यकता होती है। फिक्स्ड-पॉइंट प्रोग्रामिंग के लिए सामान्यतः C डेटा प्रकार#मुख्य प्रकार के उपयोग की आवश्यकता होती है। फिक्स्ड-पॉइंट एप्लिकेशन [[ फ़्लोटिंग पॉइंट को ब्लॉक करें ]] का उपयोग कर सकते हैं, जो | कई मामलों में, निश्चित-बिंदु गणनाओं की क्वांटिज़ेशन (सिग्नल प्रोसेसिंग) त्रुटियों का विश्लेषण समतुल्य फ़्लोटिंग-पॉइंट गणनाओं की तुलना में आसान होता है। ट्रंकेशन पर रैखिककरण तकनीकों को लागू करना, जैसे कि [[ तड़पना ]]िंग और/या शोर को आकार देना, निश्चित-बिंदु अंकगणित के भीतर अधिक सीधा-आगे है। दूसरी ओर, निश्चित बिंदु के उपयोग के लिए प्रोग्रामर को अधिक देखभाल की आवश्यकता होती है। अतिप्रवाह से बचने के लिए गणना में चर की श्रेणियों और सभी मध्यवर्ती मूल्यों के लिए बहुत सख्त अनुमान की आवश्यकता होती है, और अक्सर उनके स्केलिंग कारकों को समायोजित करने के लिए अतिरिक्त कोड की भी आवश्यकता होती है। फिक्स्ड-पॉइंट प्रोग्रामिंग के लिए सामान्यतः C डेटा प्रकार#मुख्य प्रकार के उपयोग की आवश्यकता होती है। फिक्स्ड-पॉइंट एप्लिकेशन [[ फ़्लोटिंग पॉइंट को ब्लॉक करें ]] का उपयोग कर सकते हैं, जो निश्चित-पॉइंट वातावरण है जिसमें फिक्स्ड-पॉइंट डेटा के प्रत्येक सरणी (ब्लॉक) को ही शब्द में सामान्य घातांक के साथ स्केल किया जाता है। | ||
==अनुप्रयोग== | ==अनुप्रयोग== | ||
दशमलव निश्चित-बिंदु का सामान्य उपयोग मौद्रिक मूल्यों को संग्रहीत करने के लिए होता है, जिसके लिए फ़्लोटिंग-पॉइंट संख्याओं के जटिल गोलाई नियम अक्सर दायित्व होते हैं। उदाहरण के लिए, C में लिखा गया ओपन सोर्स मनी मैनेजमेंट एप्लिकेशन [[GnuCash]], इस कारण से संस्करण 1.6 के रूप में फ्लोटिंग-पॉइंट से फिक्स्ड-पॉइंट पर स्विच हो गया। | |||
दशमलव निश्चित-बिंदु का | |||
बाइनरी फिक्स्ड-पॉइंट (बाइनरी स्केलिंग) का उपयोग 1960 के दशक के अंत से 1980 के दशक तक व्यापक रूप से वास्तविक समय कंप्यूटिंग के लिए किया गया था जो गणितीय रूप से गहन था, जैसे उड़ान सिमुलेशन और परमाणु ऊर्जा संयंत्र नियंत्रण एल्गोरिदम में। यह अभी भी कई डिजिटल सिग्नल प्रोसेसिंग अनुप्रयोगों और कस्टम मेड माइक्रोप्रोसेसरों में उपयोग किया जाता है। कोणों से संबंधित गणनाओं में [[द्विआधारी कोणीय माप]] (बीएएम) का उपयोग किया जाएगा। | बाइनरी फिक्स्ड-पॉइंट (बाइनरी स्केलिंग) का उपयोग 1960 के दशक के अंत से 1980 के दशक तक व्यापक रूप से वास्तविक समय कंप्यूटिंग के लिए किया गया था जो गणितीय रूप से गहन था, जैसे उड़ान सिमुलेशन और परमाणु ऊर्जा संयंत्र नियंत्रण एल्गोरिदम में। यह अभी भी कई डिजिटल सिग्नल प्रोसेसिंग अनुप्रयोगों और कस्टम मेड माइक्रोप्रोसेसरों में उपयोग किया जाता है। कोणों से संबंधित गणनाओं में [[द्विआधारी कोणीय माप]] (बीएएम) का उपयोग किया जाएगा। | ||
Line 105: | Line 101: | ||
==संचालन== | ==संचालन== | ||
===जोड़ और घटाव=== | ===जोड़ और घटाव=== | ||
समान अंतर्निहित स्केलिंग कारक के साथ दो मानों को जोड़ने या घटाने के लिए, अंतर्निहित पूर्णांकों को जोड़ना या घटाना पर्याप्त है; परिणाम में उनका सामान्य अंतर्निहित स्केलिंग कारक होगा, इस प्रकार इसे ऑपरेंड के समान प्रोग्राम चर में संग्रहीत किया जा सकता है। ये ऑपरेशन सटीक गणितीय परिणाम देते हैं, जब तक कि कोई अंकगणितीय अतिप्रवाह नहीं होता है - अर्थात, जब तक परिणामी पूर्णांक को प्राप्त प्रोग्राम चर (कंप्यूटिंग) में संग्रहीत किया जा सकता है। यदि मानों में अलग-अलग स्केलिंग कारक हैं, तो उन्हें ऑपरेशन से पहले | समान अंतर्निहित स्केलिंग कारक के साथ दो मानों को जोड़ने या घटाने के लिए, अंतर्निहित पूर्णांकों को जोड़ना या घटाना पर्याप्त है; परिणाम में उनका सामान्य अंतर्निहित स्केलिंग कारक होगा, इस प्रकार इसे ऑपरेंड के समान प्रोग्राम चर में संग्रहीत किया जा सकता है। ये ऑपरेशन सटीक गणितीय परिणाम देते हैं, जब तक कि कोई अंकगणितीय अतिप्रवाह नहीं होता है - अर्थात, जब तक परिणामी पूर्णांक को प्राप्त प्रोग्राम चर (कंप्यूटिंग) में संग्रहीत किया जा सकता है। यदि मानों में अलग-अलग स्केलिंग कारक हैं, तो उन्हें ऑपरेशन से पहले सामान्य स्केलिंग कारक में परिवर्तित किया जाना चाहिए। | ||
===गुणा=== | ===गुणा=== | ||
दो निश्चित-बिंदु संख्याओं को गुणा करने के लिए, दो अंतर्निहित पूर्णांकों को गुणा करना पर्याप्त है, और मान लें कि परिणाम का स्केलिंग कारक उनके स्केलिंग कारकों का उत्पाद है। परिणाम सटीक होगा, बिना किसी गोलाई के, बशर्ते कि यह प्राप्तकर्ता चर को ओवरफ्लो न करे। | दो निश्चित-बिंदु संख्याओं को गुणा करने के लिए, दो अंतर्निहित पूर्णांकों को गुणा करना पर्याप्त है, और मान लें कि परिणाम का स्केलिंग कारक उनके स्केलिंग कारकों का उत्पाद है। परिणाम सटीक होगा, बिना किसी गोलाई के, बशर्ते कि यह प्राप्तकर्ता चर को ओवरफ्लो न करे। | ||
उदाहरण के लिए, संख्या 123 को 1/1000 (0.123) से गुणा करने पर और 25 को 1/10 (2.5) से गुणा करने पर पूर्णांक 123×25 = 3075 प्राप्त होता है, जिसे (1/1000)×(1/10) = 1/10000 से बढ़ाया जाता है। , अर्थात 3075/10000 = 0.3075। | उदाहरण के लिए, संख्या 123 को 1/1000 (0.123) से गुणा करने पर और 25 को 1/10 (2.5) से गुणा करने पर पूर्णांक 123×25 = 3075 प्राप्त होता है, जिसे (1/1000)×(1/10) = 1/10000 से बढ़ाया जाता है। , अर्थात 3075/10000 = 0.3075। अन्य उदाहरण के रूप में, पहली संख्या को 155 से गुणा करने पर अंतर्निहित स्केलिंग कारक (1/1000) × (1/32) = 1/32000 के साथ पूर्णांक 123×155 = 19065 प्राप्त होता है। , अर्थात 19065/32000 = 0.59578125। | ||
बाइनरी में, स्केलिंग फ़ैक्टर का उपयोग करना आम बात है जो दो की शक्ति है। गुणन के बाद, स्केलिंग कारक को दाईं ओर स्थानांतरित करके विभाजित किया जा सकता है। अधिकांश कंप्यूटरों में शिफ्टिंग सरल और तेज़ है। शिफ्टिंग से पहले स्केलिंग फैक्टर के आधे हिस्से का 'राउंडिंग ऐड' जोड़कर राउंडिंग संभव है; प्रमाण: गोल(x/y) = मंजिल(x/y + 0.5) = मंजिल((x + y/2)/y) = शिफ्ट-ऑफ-एन(x + 2^(n-1)) | बाइनरी में, स्केलिंग फ़ैक्टर का उपयोग करना आम बात है जो दो की शक्ति है। गुणन के बाद, स्केलिंग कारक को दाईं ओर स्थानांतरित करके विभाजित किया जा सकता है। अधिकांश कंप्यूटरों में शिफ्टिंग सरल और तेज़ है। शिफ्टिंग से पहले स्केलिंग फैक्टर के आधे हिस्से का 'राउंडिंग ऐड' जोड़कर राउंडिंग संभव है; प्रमाण: गोल(x/y) = मंजिल(x/y + 0.5) = मंजिल((x + y/2)/y) = शिफ्ट-ऑफ-एन(x + 2^(n-1)) समान विधि किसी भी स्केलिंग में प्रयोग योग्य है। | ||
===विभाजन=== | ===विभाजन=== | ||
दो निश्चित-बिंदु संख्याओं को विभाजित करने के लिए, कोई उनके अंतर्निहित पूर्णांकों का पूर्णांक भागफल लेता है, और मानता है कि स्केलिंग कारक उनके स्केलिंग कारकों का भागफल है। सामान्य तौर पर, प्रथम श्रेणी में पूर्णांकन की आवश्यकता होती है और इसलिए परिणाम सटीक नहीं होता है। | दो निश्चित-बिंदु संख्याओं को विभाजित करने के लिए, कोई उनके अंतर्निहित पूर्णांकों का पूर्णांक भागफल लेता है, और मानता है कि स्केलिंग कारक उनके स्केलिंग कारकों का भागफल है। सामान्य तौर पर, प्रथम श्रेणी में पूर्णांकन की आवश्यकता होती है और इसलिए परिणाम सटीक नहीं होता है। | ||
उदाहरण के लिए, 3456 को 1/100 (34.56) से विभाजित करने पर और 1234 को 1/1000 (1.234) से विभाजित करने पर स्केल फैक्टर (1/100)/(1/1000) = के साथ पूर्णांक 3456÷1234 = 3 (गोल) प्राप्त होता है। 10, अर्थात, 30। | उदाहरण के लिए, 3456 को 1/100 (34.56) से विभाजित करने पर और 1234 को 1/1000 (1.234) से विभाजित करने पर स्केल फैक्टर (1/100)/(1/1000) = के साथ पूर्णांक 3456÷1234 = 3 (गोल) प्राप्त होता है। 10, अर्थात, 30। अन्य उदाहरण के रूप में, पहली संख्या को 155 से विभाजित करने पर 1/32 (155/32 = 4.84375) द्वारा स्केल किया गया पूर्णांक 3456÷155 = 22 (गोल) प्राप्त होता है, जिसमें अंतर्निहित स्केलिंग कारक (1/ 100)/(1/32) = 32/100 = 8/25, अर्थात 22×32/100 = 7.04। | ||
यदि परिणाम सटीक नहीं है, तो लाभांश को छोटे स्केलिंग कारक में परिवर्तित करके राउंडिंग द्वारा उत्पन्न त्रुटि को कम किया जा सकता है या समाप्त भी किया जा सकता है। उदाहरण के लिए, यदि r = 1.23 को 1/100 स्केलिंग के साथ 123 के रूप में दर्शाया जाता है, और s = 6.25 को 1/1000 स्केलिंग के साथ 6250 के रूप में दर्शाया जाता है, तो पूर्णांकों का सरल विभाजन स्केलिंग कारक के साथ 123÷6250 = 0 (गोल) प्राप्त करता है ( 1/100)/(1/1000) = 10. यदि r को पहले स्केलिंग फैक्टर 1/1000000 के साथ 1,230,000 में परिवर्तित किया जाता है, तो परिणाम 1,230,000÷6250 = 197 (गोल) स्केल फैक्टर 1/1000 (0.197) के साथ होगा। सटीक मान 1.23/6.25 0.1968 है। | यदि परिणाम सटीक नहीं है, तो लाभांश को छोटे स्केलिंग कारक में परिवर्तित करके राउंडिंग द्वारा उत्पन्न त्रुटि को कम किया जा सकता है या समाप्त भी किया जा सकता है। उदाहरण के लिए, यदि r = 1.23 को 1/100 स्केलिंग के साथ 123 के रूप में दर्शाया जाता है, और s = 6.25 को 1/1000 स्केलिंग के साथ 6250 के रूप में दर्शाया जाता है, तो पूर्णांकों का सरल विभाजन स्केलिंग कारक के साथ 123÷6250 = 0 (गोल) प्राप्त करता है ( 1/100)/(1/1000) = 10. यदि r को पहले स्केलिंग फैक्टर 1/1000000 के साथ 1,230,000 में परिवर्तित किया जाता है, तो परिणाम 1,230,000÷6250 = 197 (गोल) स्केल फैक्टर 1/1000 (0.197) के साथ होगा। सटीक मान 1.23/6.25 0.1968 है। | ||
Line 127: | Line 121: | ||
निश्चित-बिंदु कंप्यूटिंग में किसी मान को भिन्न स्केलिंग कारक में परिवर्तित करना अक्सर आवश्यक होता है। यह ऑपरेशन आवश्यक है, उदाहरण के लिए: | निश्चित-बिंदु कंप्यूटिंग में किसी मान को भिन्न स्केलिंग कारक में परिवर्तित करना अक्सर आवश्यक होता है। यह ऑपरेशन आवश्यक है, उदाहरण के लिए: | ||
* किसी मान को प्रोग्राम वैरिएबल में संग्रहीत करने के लिए जिसमें | * किसी मान को प्रोग्राम वैरिएबल में संग्रहीत करने के लिए जिसमें अलग अंतर्निहित स्केलिंग कारक होता है; | ||
* दो मानों को | * दो मानों को ही स्केलिंग फ़ैक्टर में परिवर्तित करना, ताकि उन्हें जोड़ा या घटाया जा सके; | ||
* किसी मूल्य को दूसरे से गुणा या विभाजित करने के बाद उसके मूल स्केलिंग कारक को पुनर्स्थापित करना; | * किसी मूल्य को दूसरे से गुणा या विभाजित करने के बाद उसके मूल स्केलिंग कारक को पुनर्स्थापित करना; | ||
* किसी विभाजन के परिणाम की सटीकता में सुधार करना; | * किसी विभाजन के परिणाम की सटीकता में सुधार करना; | ||
* यह सुनिश्चित करने के लिए कि किसी उत्पाद या भागफल का स्केलिंग कारक 10 जैसी | * यह सुनिश्चित करने के लिए कि किसी उत्पाद या भागफल का स्केलिंग कारक 10 जैसी साधारण शक्ति है<sup>n</sup>या 2<sup>n</sup>; | ||
* यह सुनिश्चित करने के लिए कि किसी ऑपरेशन के परिणाम को ओवरफ्लो के बिना प्रोग्राम वेरिएबल में संग्रहीत किया जा सकता है; | * यह सुनिश्चित करने के लिए कि किसी ऑपरेशन के परिणाम को ओवरफ्लो के बिना प्रोग्राम वेरिएबल में संग्रहीत किया जा सकता है; | ||
* निश्चित-बिंदु डेटा को संसाधित करने वाले हार्डवेयर की लागत को कम करना। | * निश्चित-बिंदु डेटा को संसाधित करने वाले हार्डवेयर की लागत को कम करना। | ||
किसी संख्या को स्केलिंग कारक आर के साथ | किसी संख्या को स्केलिंग कारक आर के साथ निश्चित बिंदु प्रकार से स्केलिंग कारक एस के साथ दूसरे प्रकार में परिवर्तित करने के लिए, अंतर्निहित पूर्णांक को अनुपात आर/एस से गुणा किया जाना चाहिए। इस प्रकार, उदाहरण के लिए, मान 1.23 = 123/100 को स्केलिंग कारक R=1/100 से स्केलिंग कारक S=1/1000 वाले में बदलने के लिए, पूर्णांक 123 को (1/100)/(1/1000) से गुणा किया जाना चाहिए ) = 10, प्रतिनिधित्व 1230/1000 प्राप्त होता है। | ||
यदि स्केलिंग कारक पूर्णांक का प्रतिनिधित्व करने के लिए आंतरिक रूप से उपयोग की जाने वाली आधार की शक्ति है, तो स्केलिंग कारक को बदलने के लिए केवल पूर्णांक के निम्न-क्रम अंकों को छोड़ने या शून्य अंक जोड़ने की आवश्यकता होती है। हालाँकि, इस ऑपरेशन में संख्या का चिह्न सुरक्षित रहना चाहिए। दो के पूरक प्रतिनिधित्व में, इसका अर्थ है [[अंकगणितीय बदलाव]] संचालन के रूप में साइन बिट का विस्तार करना। | यदि स्केलिंग कारक पूर्णांक का प्रतिनिधित्व करने के लिए आंतरिक रूप से उपयोग की जाने वाली आधार की शक्ति है, तो स्केलिंग कारक को बदलने के लिए केवल पूर्णांक के निम्न-क्रम अंकों को छोड़ने या शून्य अंक जोड़ने की आवश्यकता होती है। हालाँकि, इस ऑपरेशन में संख्या का चिह्न सुरक्षित रहना चाहिए। दो के पूरक प्रतिनिधित्व में, इसका अर्थ है [[अंकगणितीय बदलाव]] संचालन के रूप में साइन बिट का विस्तार करना। | ||
Line 153: | Line 147: | ||
==हार्डवेयर समर्थन== | ==हार्डवेयर समर्थन== | ||
===स्केलिंग और पुनर्सामान्यीकरण=== | ===स्केलिंग और पुनर्सामान्यीकरण=== | ||
विशिष्ट प्रोसेसर के पास निश्चित-बिंदु अंकगणित के लिए विशिष्ट समर्थन नहीं होता है। हालाँकि, बाइनरी अंकगणित वाले अधिकांश कंप्यूटरों में तेज़ [[बिट शिफ्ट]] निर्देश होते हैं जो पूर्णांक को 2 की किसी भी शक्ति से गुणा या विभाजित कर सकते हैं; विशेष रूप से, | विशिष्ट प्रोसेसर के पास निश्चित-बिंदु अंकगणित के लिए विशिष्ट समर्थन नहीं होता है। हालाँकि, बाइनरी अंकगणित वाले अधिकांश कंप्यूटरों में तेज़ [[बिट शिफ्ट]] निर्देश होते हैं जो पूर्णांक को 2 की किसी भी शक्ति से गुणा या विभाजित कर सकते हैं; विशेष रूप से, अंकगणितीय बदलाव निर्देश। इन निर्देशों का उपयोग संख्या के चिह्न को संरक्षित करते हुए स्केलिंग कारकों को जल्दी से बदलने के लिए किया जा सकता है जो 2 की घात हैं। | ||
[[आईबीएम 1620]] और [[बरोज़ मीडियम सिस्टम्स]] जैसे शुरुआती कंप्यूटरों ने पूर्णांकों के लिए [[बाइनरी-कोडित दशमलव]] (बीसीडी) प्रतिनिधित्व का उपयोग किया, अर्थात् आधार 10 जहां प्रत्येक दशमलव अंक स्वतंत्र रूप से 4 बिट्स के साथ एन्कोड किया गया था। कुछ प्रोसेसर, जैसे माइक्रोकंट्रोलर, अभी भी इसका उपयोग कर सकते हैं। ऐसी मशीनों में, दशमलव स्केलिंग कारकों का रूपांतरण बिट शिफ्ट और/या मेमोरी एड्रेस हेरफेर द्वारा किया जा सकता है। | [[आईबीएम 1620]] और [[बरोज़ मीडियम सिस्टम्स]] जैसे शुरुआती कंप्यूटरों ने पूर्णांकों के लिए [[बाइनरी-कोडित दशमलव]] (बीसीडी) प्रतिनिधित्व का उपयोग किया, अर्थात् आधार 10 जहां प्रत्येक दशमलव अंक स्वतंत्र रूप से 4 बिट्स के साथ एन्कोड किया गया था। कुछ प्रोसेसर, जैसे माइक्रोकंट्रोलर, अभी भी इसका उपयोग कर सकते हैं। ऐसी मशीनों में, दशमलव स्केलिंग कारकों का रूपांतरण बिट शिफ्ट और/या मेमोरी एड्रेस हेरफेर द्वारा किया जा सकता है। | ||
कुछ डीएसपी आर्किटेक्चर विशिष्ट निश्चित-बिंदु प्रारूपों के लिए मूल समर्थन प्रदान करते हैं, उदाहरण के लिए एन-1 अंश बिट्स के साथ हस्ताक्षरित एन-बिट संख्याएं (जिनके मान -1 और लगभग +1 के बीच हो सकते हैं)। समर्थन में | कुछ डीएसपी आर्किटेक्चर विशिष्ट निश्चित-बिंदु प्रारूपों के लिए मूल समर्थन प्रदान करते हैं, उदाहरण के लिए एन-1 अंश बिट्स के साथ हस्ताक्षरित एन-बिट संख्याएं (जिनके मान -1 और लगभग +1 के बीच हो सकते हैं)। समर्थन में गुणा निर्देश शामिल हो सकता है जिसमें पुनर्सामान्यीकरण शामिल है - उत्पाद का 2n−2 से n−1 अंश बिट्स तक स्केलिंग रूपांतरण।{{cn|date=July 2021}} यदि सीपीयू वह सुविधा प्रदान नहीं करता है, तो प्रोग्रामर को उत्पाद को बड़े पर्याप्त रजिस्टर या अस्थायी चर में सहेजना होगा, और पुनर्सामान्यीकरण को स्पष्ट रूप से कोड करना होगा। | ||
===अतिप्रवाह=== | ===अतिप्रवाह=== | ||
अतिप्रवाह तब होता है जब अंकगणितीय ऑपरेशन का परिणाम निर्दिष्ट गंतव्य क्षेत्र में संग्रहीत करने के लिए बहुत बड़ा होता है। जोड़ और घटाव के अलावा, परिणाम के लिए ऑपरेंड की तुलना में | अतिप्रवाह तब होता है जब अंकगणितीय ऑपरेशन का परिणाम निर्दिष्ट गंतव्य क्षेत्र में संग्रहीत करने के लिए बहुत बड़ा होता है। जोड़ और घटाव के अलावा, परिणाम के लिए ऑपरेंड की तुलना में बिट अधिक की आवश्यकता हो सकती है। एम और एन बिट्स के साथ दो अहस्ताक्षरित पूर्णांकों के गुणन में, परिणाम में एम+एन बिट्स हो सकते हैं। | ||
अतिप्रवाह के मामले में, उच्च-क्रम बिट्स आमतौर पर खो जाते हैं, क्योंकि अन-स्केल्ड पूर्णांक मॉड्यूलो 2 कम हो जाता है<sup>n</sup> जहां n भंडारण क्षेत्र का आकार है। विशेष रूप से, साइन बिट खो जाता है, जो मूल रूप से साइन और मूल्य के परिमाण को बदल सकता है। | अतिप्रवाह के मामले में, उच्च-क्रम बिट्स आमतौर पर खो जाते हैं, क्योंकि अन-स्केल्ड पूर्णांक मॉड्यूलो 2 कम हो जाता है<sup>n</sup> जहां n भंडारण क्षेत्र का आकार है। विशेष रूप से, साइन बिट खो जाता है, जो मूल रूप से साइन और मूल्य के परिमाण को बदल सकता है। | ||
कुछ प्रोसेसर हार्डवेयर [[अतिप्रवाह ध्वज]] सेट कर सकते हैं और/या ओवरफ़्लो होने पर | कुछ प्रोसेसर हार्डवेयर [[अतिप्रवाह ध्वज]] सेट कर सकते हैं और/या ओवरफ़्लो होने पर अपवाद हैंडलिंग उत्पन्न कर सकते हैं। कुछ प्रोसेसर इसके बजाय [[संतृप्ति अंकगणित]] प्रदान कर सकते हैं: यदि जोड़ या घटाव का परिणाम अतिप्रवाह होता है, तो वे इसके बजाय सबसे बड़े परिमाण के साथ मूल्य संग्रहीत करते हैं जो प्राप्त क्षेत्र में फिट हो सकता है और सही संकेत हो सकता है।{{cn|date=July 2021}} | ||
हालाँकि, ये सुविधाएँ व्यवहार में बहुत उपयोगी नहीं हैं; स्केलिंग कारकों और शब्द आकारों का चयन करना आम तौर पर आसान और सुरक्षित होता है ताकि अतिप्रवाह की संभावना को बाहर रखा जा सके, या ऑपरेशन निष्पादित करने से पहले अत्यधिक मूल्यों के लिए ऑपरेंड की जांच की जा सके। | हालाँकि, ये सुविधाएँ व्यवहार में बहुत उपयोगी नहीं हैं; स्केलिंग कारकों और शब्द आकारों का चयन करना आम तौर पर आसान और सुरक्षित होता है ताकि अतिप्रवाह की संभावना को बाहर रखा जा सके, या ऑपरेशन निष्पादित करने से पहले अत्यधिक मूल्यों के लिए ऑपरेंड की जांच की जा सके। | ||
Line 174: | Line 166: | ||
निश्चित-बिंदु संख्याओं के लिए स्पष्ट समर्थन कुछ कंप्यूटर भाषाओं द्वारा प्रदान किया जाता है, विशेष रूप से PL/I, [[COBOL]], Ada प्रोग्रामिंग भाषा, JOVIAL प्रोग्रामिंग भाषा और कोरल 66। वे बाइनरी या दशमलव स्केलिंग कारक के साथ निश्चित-बिंदु [[डेटा प्रकार]] प्रदान करते हैं। कंपाइलर स्वचालित रूप से इन डेटा-प्रकारों पर संचालन करते समय, चर पढ़ते या लिखते समय, या मानों को अन्य डेटा प्रकारों जैसे फ़्लोटिंग-पॉइंट में परिवर्तित करते समय उचित स्केलिंग रूपांतरण करने के लिए कोड उत्पन्न करता है। | निश्चित-बिंदु संख्याओं के लिए स्पष्ट समर्थन कुछ कंप्यूटर भाषाओं द्वारा प्रदान किया जाता है, विशेष रूप से PL/I, [[COBOL]], Ada प्रोग्रामिंग भाषा, JOVIAL प्रोग्रामिंग भाषा और कोरल 66। वे बाइनरी या दशमलव स्केलिंग कारक के साथ निश्चित-बिंदु [[डेटा प्रकार]] प्रदान करते हैं। कंपाइलर स्वचालित रूप से इन डेटा-प्रकारों पर संचालन करते समय, चर पढ़ते या लिखते समय, या मानों को अन्य डेटा प्रकारों जैसे फ़्लोटिंग-पॉइंट में परिवर्तित करते समय उचित स्केलिंग रूपांतरण करने के लिए कोड उत्पन्न करता है। | ||
उनमें से अधिकांश भाषाएँ 1940 और 1990 के बीच डिज़ाइन की गई थीं। अधिक आधुनिक भाषाएँ आमतौर पर स्केलिंग कारक रूपांतरण के लिए कोई निश्चित-बिंदु डेटा प्रकार या समर्थन प्रदान नहीं करती हैं। यही हाल कई पुरानी भाषाओं का भी है जो अभी भी बहुत लोकप्रिय हैं, जैसे [[फोरट्रान]], [[सी (प्रोग्रामिंग भाषा)]] और [[सी++]]। कड़ाई से मानकीकृत व्यवहार के साथ तेज़ फ़्लोटिंग-पॉइंट प्रोसेसर की व्यापक उपलब्धता ने बाइनरी फिक्स्ड पॉइंट समर्थन की मांग को काफी कम कर दिया है। | उनमें से अधिकांश भाषाएँ 1940 और 1990 के बीच डिज़ाइन की गई थीं। अधिक आधुनिक भाषाएँ आमतौर पर स्केलिंग कारक रूपांतरण के लिए कोई निश्चित-बिंदु डेटा प्रकार या समर्थन प्रदान नहीं करती हैं। यही हाल कई पुरानी भाषाओं का भी है जो अभी भी बहुत लोकप्रिय हैं, जैसे [[फोरट्रान]], [[सी (प्रोग्रामिंग भाषा)]] और [[सी++]]। कड़ाई से मानकीकृत व्यवहार के साथ तेज़ फ़्लोटिंग-पॉइंट प्रोसेसर की व्यापक उपलब्धता ने बाइनरी फिक्स्ड पॉइंट समर्थन की मांग को काफी कम कर दिया है। इसी तरह, कुछ प्रोग्रामिंग भाषाओं, जैसे सी शार्प लैंग्वेज|सी# और पायथन (प्रोग्रामिंग लैंग्वेज) में [[दशमलव फ़्लोटिंग पॉइंट]] के समर्थन ने दशमलव निश्चित-पॉइंट समर्थन की अधिकांश आवश्यकता को हटा दिया है। कुछ स्थितियों में जहां निश्चित-बिंदु संचालन की आवश्यकता होती है, उन्हें प्रोग्रामर द्वारा किसी भी प्रोग्रामिंग भाषा में स्पष्ट स्केलिंग रूपांतरण के साथ कार्यान्वित किया जा सकता है। | ||
दूसरी ओर, सभी रिलेशनल [[डेटाबेस]] और [[SQL]] नोटेशन निश्चित-बिंदु दशमलव अंकगणित और संख्याओं के भंडारण का समर्थन करते हैं। [[PostgreSQL]] में 1000 अंकों तक की संख्याओं के सटीक भंडारण के लिए | दूसरी ओर, सभी रिलेशनल [[डेटाबेस]] और [[SQL]] नोटेशन निश्चित-बिंदु दशमलव अंकगणित और संख्याओं के भंडारण का समर्थन करते हैं। [[PostgreSQL]] में 1000 अंकों तक की संख्याओं के सटीक भंडारण के लिए विशेष <samp>संख्यात्मक</samp> प्रकार है।<ref name="PostgreSQL"/> | ||
इसके अलावा, 2008 में [[अंतर्राष्ट्रीय मानक संगठन]] (आईएसओ) ने एम्बेडेड प्रोसेसर पर चलने वाले प्रोग्रामों के लाभ के लिए सी प्रोग्रामिंग भाषा को निश्चित-बिंदु डेटा प्रकारों के साथ विस्तारित करने का प्रस्ताव जारी किया।<ref name="JTC1_2008"/>इसके अलावा, [[जीएनयू कंपाइलर संग्रह]] (जीसीसी) में फिक्स्ड-पॉइंट के लिए कंपाइलर#बैक एंड|बैक-एंड सपोर्ट है।<ref name="gccback"/><ref name="gccuse"/> | इसके अलावा, 2008 में [[अंतर्राष्ट्रीय मानक संगठन]] (आईएसओ) ने एम्बेडेड प्रोसेसर पर चलने वाले प्रोग्रामों के लाभ के लिए सी प्रोग्रामिंग भाषा को निश्चित-बिंदु डेटा प्रकारों के साथ विस्तारित करने का प्रस्ताव जारी किया।<ref name="JTC1_2008"/>इसके अलावा, [[जीएनयू कंपाइलर संग्रह]] (जीसीसी) में फिक्स्ड-पॉइंट के लिए कंपाइलर#बैक एंड|बैक-एंड सपोर्ट है।<ref name="gccback"/><ref name="gccuse"/> | ||
Line 197: | Line 189: | ||
&= 11.025000 | &= 11.025000 | ||
\end{align}</math> | \end{align}</math> | ||
यदि हम | यदि हम अलग आधार चुनते हैं, विशेष रूप से कंप्यूटिंग के लिए आधार 2, तो यह समान रूप से काम करता है, क्योंकि थोड़ा सा बदलाव 2 के क्रम से गुणा या भाग के समान है। तीन दशमलव अंक लगभग 10 बाइनरी अंकों के बराबर हैं, इसलिए हमें 0.05 को गोल करना चाहिए बाइनरी पॉइंट के बाद 10 बिट्स तक। तब निकटतम सन्निकटन 0.0000110011 है। | ||
:<math>\begin{align} | :<math>\begin{align} | ||
10&= 8+2=2^3+2^1\\ | 10&= 8+2=2^3+2^1\\ | ||
Line 216: | Line 208: | ||
16 अंश बिट्स का उपयोग करके बाइनरी निश्चित बिंदु के साथ 1.2 और 5.6 के उत्पाद की गणना करने के कार्य पर विचार करें। दो संख्याओं को दर्शाने के लिए, उन्हें 2 से गुणा किया जाता है<sup>16</sup>, प्राप्त करना {{thinspace|78|643}}.2 और {{thinspace|367|001}}.6; और इन मानों को निकटतम पूर्णांक प्राप्त करते हुए पूर्णांकित करें {{thinspace|78|643}} और {{thinspace|367|002}}. ये संख्याएं दो पूरक हस्ताक्षरित प्रारूप के साथ 32-बिट शब्द में आराम से फिट हो जाएंगी। | 16 अंश बिट्स का उपयोग करके बाइनरी निश्चित बिंदु के साथ 1.2 और 5.6 के उत्पाद की गणना करने के कार्य पर विचार करें। दो संख्याओं को दर्शाने के लिए, उन्हें 2 से गुणा किया जाता है<sup>16</sup>, प्राप्त करना {{thinspace|78|643}}.2 और {{thinspace|367|001}}.6; और इन मानों को निकटतम पूर्णांक प्राप्त करते हुए पूर्णांकित करें {{thinspace|78|643}} और {{thinspace|367|002}}. ये संख्याएं दो पूरक हस्ताक्षरित प्रारूप के साथ 32-बिट शब्द में आराम से फिट हो जाएंगी। | ||
इन पूर्णांकों को | इन पूर्णांकों को साथ गुणा करने पर 35-बिट पूर्णांक प्राप्त होता है {{thinspace|28|862|138|286}} 32 अंश बिट्स के साथ, बिना किसी गोलाई के। ध्यान दें कि इस मान को सीधे 32-बिट पूर्णांक चर में संग्रहीत करने से अतिप्रवाह होगा और सबसे महत्वपूर्ण बिट्स का नुकसान होगा। व्यवहार में, इसे संभवतः हस्ताक्षरित 64-बिट पूर्णांक चर या [[रजिस्टर (कंप्यूटिंग)]] में संग्रहीत किया जाएगा। | ||
यदि परिणाम को डेटा के समान प्रारूप में 16 अंश बिट्स के साथ संग्रहीत किया जाना है, तो उस पूर्णांक को 2 से विभाजित किया जाना चाहिए<sup>16</sup>, जो लगभग देता है {{thinspace|440|401}}.28, और फिर निकटतम पूर्णांक तक पूर्णांकित किया गया। यह प्रभाव 2 जोड़कर प्राप्त किया जा सकता है<sup>15</sup>और फिर परिणाम को 16 बिट्स तक स्थानांतरित करना। परिणाम है {{thinspace|440|401}}, जो मान 6 को दर्शाता है।{{thinspace|719|985|961|914|062|5}}. प्रारूप की सटीकता को ध्यान में रखते हुए, उस मान को 6 के रूप में बेहतर ढंग से व्यक्त किया जाता है।{{thinspace|719|986}} ± 0.{{thinspace|000|008}} (ऑपरेंड सन्निकटन से आने वाली त्रुटि की गिनती नहीं)। सही परिणाम 1.2 × 5.6 = 6.72 होगा। | यदि परिणाम को डेटा के समान प्रारूप में 16 अंश बिट्स के साथ संग्रहीत किया जाना है, तो उस पूर्णांक को 2 से विभाजित किया जाना चाहिए<sup>16</sup>, जो लगभग देता है {{thinspace|440|401}}.28, और फिर निकटतम पूर्णांक तक पूर्णांकित किया गया। यह प्रभाव 2 जोड़कर प्राप्त किया जा सकता है<sup>15</sup>और फिर परिणाम को 16 बिट्स तक स्थानांतरित करना। परिणाम है {{thinspace|440|401}}, जो मान 6 को दर्शाता है।{{thinspace|719|985|961|914|062|5}}. प्रारूप की सटीकता को ध्यान में रखते हुए, उस मान को 6 के रूप में बेहतर ढंग से व्यक्त किया जाता है।{{thinspace|719|986}} ± 0.{{thinspace|000|008}} (ऑपरेंड सन्निकटन से आने वाली त्रुटि की गिनती नहीं)। सही परिणाम 1.2 × 5.6 = 6.72 होगा। | ||
Line 230: | Line 222: | ||
निश्चित-बिंदु प्रारूप के मापदंडों को संक्षिप्त रूप से निर्दिष्ट करने के लिए विभिन्न नोटेशन का उपयोग किया गया है। निम्नलिखित सूची में, f भिन्नात्मक बिट्स की संख्या का प्रतिनिधित्व करता है, m परिमाण या पूर्णांक बिट्स की संख्या, s साइन बिट्स की संख्या और b बिट्स की कुल संख्या का प्रतिनिधित्व करता है। | निश्चित-बिंदु प्रारूप के मापदंडों को संक्षिप्त रूप से निर्दिष्ट करने के लिए विभिन्न नोटेशन का उपयोग किया गया है। निम्नलिखित सूची में, f भिन्नात्मक बिट्स की संख्या का प्रतिनिधित्व करता है, m परिमाण या पूर्णांक बिट्स की संख्या, s साइन बिट्स की संख्या और b बिट्स की कुल संख्या का प्रतिनिधित्व करता है। | ||
* COBOL प्रोग्रामिंग भाषा मूल रूप से मनमाने आकार और दशमलव स्केलिंग के साथ दशमलव निश्चित-परिशुद्धता का समर्थन करती थी, जिसका प्रारूप ग्राफ़िक रूप से निर्दिष्ट किया गया था {{mono|PIC}} निर्देश. उदाहरण के लिए, {{mono|PIC S9999V99}} दो दशमलव अंश अंकों के साथ | * COBOL प्रोग्रामिंग भाषा मूल रूप से मनमाने आकार और दशमलव स्केलिंग के साथ दशमलव निश्चित-परिशुद्धता का समर्थन करती थी, जिसका प्रारूप ग्राफ़िक रूप से निर्दिष्ट किया गया था {{mono|PIC}} निर्देश. उदाहरण के लिए, {{mono|PIC S9999V99}} दो दशमलव अंश अंकों के साथ संकेत-परिमाण 6-अंकीय दशमलव पूर्णांक निर्दिष्ट किया।<ref name="cobibm"/>* निर्माण {{mono|REAL FIXED BINARY (}}पी{{mono|,}}एफ{{mono|)}} का उपयोग पीएल/आई प्रोग्रामिंग भाषा में, अंश भाग में एफ बिट्स के साथ पी कुल बिट्स (चिह्न सहित नहीं) के साथ निश्चित-बिंदु हस्ताक्षरित बाइनरी डेटा प्रकार निर्दिष्ट करने के लिए किया जाता है; यह 1/2 के स्केलिंग कारक के साथ पी+1 बिट हस्ताक्षरित पूर्णांक है<sup>च</sup>. उत्तरार्द्ध सकारात्मक या नकारात्मक हो सकता है। कोई निर्दिष्ट कर सकता है {{mono|COMPLEX}} के बजाय {{mono|REAL}}, और {{mono|DECIMAL}} के बजाय {{mono|BINARY}} आधार 10 के लिए। | ||
*एडीए प्रोग्रामिंग भाषा में, | *एडीए प्रोग्रामिंग भाषा में, संख्यात्मक डेटा प्रकार निर्दिष्ट किया जा सकता है, उदाहरण के लिए,{{code|2=ada|type F is delta 0.01 range -100.0 .. 100.0}}, जिसका अर्थ है निश्चित-बिंदु प्रतिनिधित्व जिसमें 7 निहित अंश बिट्स (एक स्केलिंग कारक 1/128 प्रदान करते हुए) और कम से कम 15 बिट्स (-128.00 से लगभग +128.00 तक की वास्तविक सीमा सुनिश्चित करना) के साथ दो के पूरक प्रारूप में हस्ताक्षरित बाइनरी पूर्णांक शामिल है। ).<ref name="adafix"/>* [[क्यू (संख्या प्रारूप)]] को [[ टेक्सस उपकरण ]]्स द्वारा परिभाषित किया गया था।<ref name="TI_2003"/>एक लिखता है {{mono|Q}}f अंश बिट्स के साथ हस्ताक्षरित बाइनरी निश्चित-बिंदु मान निर्दिष्ट करने के लिए; उदाहरण के लिए, {{mono|Q15}} स्केलिंग कारक 1/2 के साथ दो के पूरक नोटेशन में हस्ताक्षरित पूर्णांक निर्दिष्ट करता है<sup>15</sup>. कोड {{mono|Q}}एम{{mono|.}}एफ अतिरिक्त रूप से निर्दिष्ट करता है कि संख्या में मान के पूर्णांक भाग में एम बिट्स हैं, साइन बिट की गिनती नहीं। इस प्रकार {{mono|Q1.30}} 1 पूर्णांक बिट और 30 भिन्नात्मक बिट्स के साथ बाइनरी फिक्स्ड-पॉइंट प्रारूप का वर्णन करेगा, जिसे स्केलिंग कारक 1/2 के साथ 32-बिट 2 के पूरक पूर्णांक के रूप में संग्रहीत किया जा सकता है।<sup>30</sup>.<ref name="TI_2003"/><ref name="mwork"/>[[एआरएम वास्तुकला]] द्वारा समान नोटेशन का उपयोग किया गया है, सिवाय इसके कि वे एम के मूल्य में साइन बिट की गणना करते हैं; इसलिए उपरोक्त वही प्रारूप निर्दिष्ट किया जाएगा {{mono|Q2.30}}.<ref name="ARM_2001"/><ref name="ARM_2006"/>* संकेतन {{mono|B}}एम का प्रयोग किया गया है पूर्णांक भाग में एम बिट्स के साथ निश्चित बाइनरी प्रारूप का मतलब है; शेष शब्द अंश अंश हैं। उदाहरण के लिए, अधिकतम और न्यूनतम मान जिन्हें किसी हस्ताक्षरित में संग्रहीत किया जा सकता है {{mono|B16}} संख्याएँ क्रमशः ≈32767.9999847 और −32768.0 हैं। | ||
* [[VisSim]] कंपनी का उपयोग किया गया {{mono|fx}}एम{{mono|.}}बी पूर्णांक भाग में बी कुल बिट्स और एम बिट्स के साथ | * [[VisSim]] कंपनी का उपयोग किया गया {{mono|fx}}एम{{mono|.}}बी पूर्णांक भाग में बी कुल बिट्स और एम बिट्स के साथ बाइनरी निश्चित-बिंदु मान को दर्शाने के लिए; अर्थात्, स्केलिंग कारक 1/2 के साथ बी-बिट पूर्णांक<sup>b−m</sup>. इस प्रकार {{mono|fx1.16}} का मतलब 16-बिट संख्या होगा जिसमें पूर्णांक भाग में 1 बिट और अंश में 15 होगा।<ref name="vsi"/>* [[PlayStation 2]] GS (PlayStation 2 तकनीकी विनिर्देश#ग्राफ़िक्स प्रोसेसिंग यूनिट| ग्राफ़िक्स सिंथेसाइज़र) उपयोगकर्ता गाइड नोटेशन का उपयोग करता है{{mono|:}}एम{{mono|:}}f, जहां s साइन बिट की उपस्थिति (0 या 1) निर्दिष्ट करता है।<ref name="PS2"/>उदाहरण के लिए, {{mono|0:5:3}} 1/2 के स्केलिंग कारक के साथ अहस्ताक्षरित 8-बिट पूर्णांक का प्रतिनिधित्व करता है<sup>3</sup>. | ||
* [[लैबव्यू]] प्रोग्रामिंग भाषा नोटेशन का उपयोग करती है {{mono|<}}एस{{mono|,}}बी{{mono|,}}एम{{mono|>}} 'एफएक्सपी' निश्चित बिंदु संख्याओं के पैरामीटर निर्दिष्ट करने के लिए। एस घटक या तो '+' या '±' हो सकता है, जो क्रमशः | * [[लैबव्यू]] प्रोग्रामिंग भाषा नोटेशन का उपयोग करती है {{mono|<}}एस{{mono|,}}बी{{mono|,}}एम{{mono|>}} 'एफएक्सपी' निश्चित बिंदु संख्याओं के पैरामीटर निर्दिष्ट करने के लिए। एस घटक या तो '+' या '±' हो सकता है, जो क्रमशः अहस्ताक्षरित या 2 के पूरक हस्ताक्षरित संख्या को दर्शाता है। बी घटक बिट्स की कुल संख्या है, और एम पूर्णांक भाग में बिट्स की संख्या है। | ||
==सॉफ़्टवेयर अनुप्रयोग उदाहरण== | ==सॉफ़्टवेयर अनुप्रयोग उदाहरण== | ||
* लोकप्रिय [[ट्रू टाइप]] फ़ॉन्ट प्रारूप अपने निर्देशों में कुछ संख्यात्मक मानों के लिए दशमलव के बाईं ओर 26 बिट्स के साथ 32-बिट हस्ताक्षरित बाइनरी फिक्स्ड-पॉइंट का उपयोग करता है।<ref name="TTS"/>[[फ़ॉन्ट संकेत]] और प्रदर्शन कारणों से आवश्यक न्यूनतम मात्रा में सटीकता प्रदान करने के लिए इस प्रारूप को चुना गया था।<ref name="Freetype"/>* [[3DO इंटरएक्टिव मल्टीप्लेयर]], [[ प्ले स्टेशन ]], [[ अब शनि ]] और [[अटारी जगुआर]] सहित [[वीडियो गेम कंसोल की पांचवीं पीढ़ी]] के लिए सभी 3D गेम,<ref name="Dolphin_2014"/>छठी पीढ़ी के [[ खेल घन ]] के अलावा, फिक्स्ड-पॉइंट अंकगणित का उपयोग करें, क्योंकि सिस्टम में हार्डवेयर फ्लोट-पॉइंट इकाइयों की कमी है। प्लेस्टेशन ट्रांसफॉर्मेशन कोप्रोसेसर 12 अंश बिट्स के साथ 16-बिट फिक्स्ड पॉइंट का समर्थन करता है। | * लोकप्रिय [[ट्रू टाइप]] फ़ॉन्ट प्रारूप अपने निर्देशों में कुछ संख्यात्मक मानों के लिए दशमलव के बाईं ओर 26 बिट्स के साथ 32-बिट हस्ताक्षरित बाइनरी फिक्स्ड-पॉइंट का उपयोग करता है।<ref name="TTS"/>[[फ़ॉन्ट संकेत]] और प्रदर्शन कारणों से आवश्यक न्यूनतम मात्रा में सटीकता प्रदान करने के लिए इस प्रारूप को चुना गया था।<ref name="Freetype"/>* [[3DO इंटरएक्टिव मल्टीप्लेयर]], [[ प्ले स्टेशन ]], [[ अब शनि ]] और [[अटारी जगुआर]] सहित [[वीडियो गेम कंसोल की पांचवीं पीढ़ी]] के लिए सभी 3D गेम,<ref name="Dolphin_2014"/>छठी पीढ़ी के [[ खेल घन ]] के अलावा, फिक्स्ड-पॉइंट अंकगणित का उपयोग करें, क्योंकि सिस्टम में हार्डवेयर फ्लोट-पॉइंट इकाइयों की कमी है। प्लेस्टेशन ट्रांसफॉर्मेशन कोप्रोसेसर 12 अंश बिट्स के साथ 16-बिट फिक्स्ड पॉइंट का समर्थन करता है। | ||
* वैज्ञानिकों और गणितज्ञों द्वारा व्यापक रूप से उपयोग किया जाने वाला [[TeX]] टाइपसेटिंग सॉफ़्टवेयर, सभी स्थिति गणनाओं के लिए 16 अंश बिट्स के साथ 32-बिट हस्ताक्षरित बाइनरी निश्चित बिंदु का उपयोग करता है। मानों की व्याख्या | * वैज्ञानिकों और गणितज्ञों द्वारा व्यापक रूप से उपयोग किया जाने वाला [[TeX]] टाइपसेटिंग सॉफ़्टवेयर, सभी स्थिति गणनाओं के लिए 16 अंश बिट्स के साथ 32-बिट हस्ताक्षरित बाइनरी निश्चित बिंदु का उपयोग करता है। मानों की व्याख्या बिंदु (टाइपोग्राफी)|टाइपोग्राफर के बिंदु के अंशों के रूप में की जाती है। [[TeX फ़ॉन्ट मीट्रिक]] फ़ाइलें 12 अंश बिट्स के साथ 32-बिट हस्ताक्षरित निश्चित-बिंदु संख्याओं का उपयोग करती हैं। | ||
* [[ कंपकंपी (सॉफ्टवेयर) ]], [[टोस्ट (जीएसएम)]] और [[एमपीईजी ऑडियो डिकोडर]] सॉफ्टवेयर लाइब्रेरी हैं जो क्रमशः [[वॉर्बिस]], [[ पूर्ण दर ]] और [[बिका हुआ]] ऑडियो प्रारूपों को डिकोड करते हैं। ये कोडेक्स निश्चित-बिंदु अंकगणित का उपयोग करते हैं क्योंकि कई ऑडियो डिकोडिंग हार्डवेयर उपकरणों में एफपीयू नहीं होता है। | * [[ कंपकंपी (सॉफ्टवेयर) ]], [[टोस्ट (जीएसएम)]] और [[एमपीईजी ऑडियो डिकोडर]] सॉफ्टवेयर लाइब्रेरी हैं जो क्रमशः [[वॉर्बिस]], [[ पूर्ण दर ]] और [[बिका हुआ]] ऑडियो प्रारूपों को डिकोड करते हैं। ये कोडेक्स निश्चित-बिंदु अंकगणित का उपयोग करते हैं क्योंकि कई ऑडियो डिकोडिंग हार्डवेयर उपकरणों में एफपीयू नहीं होता है। | ||
* [[WavPack]] दोषरहित ऑडियो कंप्रेसर निश्चित बिंदु अंकगणित का उपयोग करता है। अन्य बातों के अलावा, यह चुनाव इस चिंता से उचित था कि विभिन्न हार्डवेयर में अलग-अलग फ़्लोटिंग-पॉइंट राउंडिंग नियम संपीड़न की दोषरहित प्रकृति को दूषित कर सकते हैं।<ref name="WavPack"/>* नेस्ट लैब्स यूटिलिटीज लाइब्रेरी,<ref name="nlu"/>निश्चित बिंदु संख्याओं के लिए मैक्रोज़ और फ़ंक्शंस का | * [[WavPack]] दोषरहित ऑडियो कंप्रेसर निश्चित बिंदु अंकगणित का उपयोग करता है। अन्य बातों के अलावा, यह चुनाव इस चिंता से उचित था कि विभिन्न हार्डवेयर में अलग-अलग फ़्लोटिंग-पॉइंट राउंडिंग नियम संपीड़न की दोषरहित प्रकृति को दूषित कर सकते हैं।<ref name="WavPack"/>* नेस्ट लैब्स यूटिलिटीज लाइब्रेरी,<ref name="nlu"/>निश्चित बिंदु संख्याओं के लिए मैक्रोज़ और फ़ंक्शंस का सीमित सेट प्रदान करता है, खासकर जब सेंसर सैंपलिंग और सेंसर आउटपुट के संदर्भ में उन संख्याओं से निपटते हैं। | ||
* [[ ओपनजीएल एन ]] 1.x विनिर्देश में | * [[ ओपनजीएल एन ]] 1.x विनिर्देश में निश्चित बिंदु प्रोफ़ाइल शामिल है, क्योंकि यह एम्बेडेड सिस्टम के लिए एपीआई है, जिसमें हमेशा एफपीयू नहीं होता है। | ||
* [[डीसी (कंप्यूटर प्रोग्राम)]] और [[बीसी प्रोग्रामिंग भाषा]] प्रोग्राम [[मनमाना-सटीक अंकगणित]]ीय कैलकुलेटर हैं, लेकिन केवल भिन्नात्मक अंकों की (उपयोगकर्ता-निर्दिष्ट) निश्चित संख्या का ट्रैक रखते हैं। | * [[डीसी (कंप्यूटर प्रोग्राम)]] और [[बीसी प्रोग्रामिंग भाषा]] प्रोग्राम [[मनमाना-सटीक अंकगणित]]ीय कैलकुलेटर हैं, लेकिन केवल भिन्नात्मक अंकों की (उपयोगकर्ता-निर्दिष्ट) निश्चित संख्या का ट्रैक रखते हैं। | ||
* [[फ़्रैक्टिंट]] संख्याओं को Q (संख्या प्रारूप) के रूप में दर्शाता है|Q2.29 निश्चित-बिंदु संख्याएँ,<ref name="Fractint_2005"/>[[Intel 80386]] या [[Intel 80486SX]] प्रोसेसर वाले पुराने पीसी पर ड्राइंग को तेज़ करने के लिए, जिसमें FPU की कमी थी। | * [[फ़्रैक्टिंट]] संख्याओं को Q (संख्या प्रारूप) के रूप में दर्शाता है|Q2.29 निश्चित-बिंदु संख्याएँ,<ref name="Fractint_2005"/>[[Intel 80386]] या [[Intel 80486SX]] प्रोसेसर वाले पुराने पीसी पर ड्राइंग को तेज़ करने के लिए, जिसमें FPU की कमी थी। | ||
* डूम (1993 वीडियो गेम) [[आईडी सॉफ्टवेयर]] द्वारा मैप सिस्टम, ज्योमेट्री, रेंडरिंग और प्लेयर मूवमेंट सहित अपने सभी गैर-पूर्णांक संगणनाओं के लिए 16.16 निश्चित बिंदु प्रतिनिधित्व का उपयोग करने वाला आखिरी प्रथम-व्यक्ति शूटर गेम था। यह प्रतिनिधित्व अभी भी डूम स्रोत पोर्ट्स की आधुनिक सूची में उपयोग किया जाता है। | * डूम (1993 वीडियो गेम) [[आईडी सॉफ्टवेयर]] द्वारा मैप सिस्टम, ज्योमेट्री, रेंडरिंग और प्लेयर मूवमेंट सहित अपने सभी गैर-पूर्णांक संगणनाओं के लिए 16.16 निश्चित बिंदु प्रतिनिधित्व का उपयोग करने वाला आखिरी प्रथम-व्यक्ति शूटर गेम था। यह प्रतिनिधित्व अभी भी डूम स्रोत पोर्ट्स की आधुनिक सूची में उपयोग किया जाता है। | ||
* [[Microsoft Azure]] [[ एक कंप्यूटर जितना ]]ों के लिए Q शार्प|Q# प्रोग्रामिंग भाषा, जो [[क्वांटम लॉजिक गेट्स]] को लागू करती है, में क्वैबिट के [[क्वांटम रजिस्टर]] पर निश्चित-बिंदु अंकगणित करने के लिए | * [[Microsoft Azure]] [[ एक कंप्यूटर जितना | कंप्यूटर जितना]] ों के लिए Q शार्प|Q# प्रोग्रामिंग भाषा, जो [[क्वांटम लॉजिक गेट्स]] को लागू करती है, में क्वैबिट के [[क्वांटम रजिस्टर]] पर निश्चित-बिंदु अंकगणित करने के लिए मानक संख्यात्मक पुस्तकालय शामिल है।<ref name="Quantum"/> | ||
==यह भी देखें== | ==यह भी देखें== | ||
* क्यू (संख्या प्रारूप) | * क्यू (संख्या प्रारूप) | ||
* [[लिबफिक्समैथ]] - निश्चित-बिंदु गणित के लिए सी में लिखी गई | * [[लिबफिक्समैथ]] - निश्चित-बिंदु गणित के लिए सी में लिखी गई लाइब्रेरी | ||
* लघुगणकीय संख्या प्रणाली | * लघुगणकीय संख्या प्रणाली | ||
* [[मिनीफ्लोट]] | * [[मिनीफ्लोट]] | ||
Line 294: | Line 286: | ||
* [http://www.superkits.net/whitepapers/Fixed%20Point%20Representation%20&%20Fractional%20Math.pdf Fixed Point Representation and Fractional Math] | * [http://www.superkits.net/whitepapers/Fixed%20Point%20Representation%20&%20Fractional%20Math.pdf Fixed Point Representation and Fractional Math] | ||
* [https://web.archive.org/web/20020611080806/http://www.embedded.com/98/9804fe2.htm A Calculated Look at Fixed-Point Arithmetic], [https://web.archive.org/web/20111005183025/http://www.eetindia.co.in/ARTICLES/1998APR/PDF/EEIOL_1998APR03_EMS_TA.pdf (PDF)] | * [https://web.archive.org/web/20020611080806/http://www.embedded.com/98/9804fe2.htm A Calculated Look at Fixed-Point Arithmetic], [https://web.archive.org/web/20111005183025/http://www.eetindia.co.in/ARTICLES/1998APR/PDF/EEIOL_1998APR03_EMS_TA.pdf (PDF)] | ||
{{DEFAULTSORT:Fixed-Point Arithmetic}}[[Category: कंप्यूटर अंकगणित]] [[Category: डेटा के प्रकार]] [[Category: आदिम प्रकार]] [[Category: बाइनरी अंकगणित|स्केलिंग]] | {{DEFAULTSORT:Fixed-Point Arithmetic}}[[Category: कंप्यूटर अंकगणित]] [[Category: डेटा के प्रकार]] [[Category: आदिम प्रकार]] [[Category: बाइनरी अंकगणित|स्केलिंग]] |
Revision as of 11:45, 6 July 2023
कम्प्यूटिंग में, निश्चित-बिंदु भिन्न (गणित) | भिन्नात्मक (गैर-पूर्णांक) संख्याओं को उनके भिन्नात्मक भाग के अंकों की निश्चित संख्या को संग्रहीत करके प्रदर्शित करने की विधि है। उदाहरण के लिए, अमेरिकी डॉलर की रकम को अक्सर दो आंशिक अंकों के साथ संग्रहित किया जाता है, जो सेंट (मुद्रा) (डॉलर का 1/100) का प्रतिनिधित्व करते हैं। अधिक आम तौर पर, यह शब्द कुछ निश्चित छोटी इकाई के पूर्णांक गुणकों के रूप में भिन्नात्मक मानों का प्रतिनिधित्व करने का उल्लेख कर सकता है, उदाहरण के लिए दस मिनट के अंतराल के पूर्णांक गुणज के रूप में घंटों की आंशिक राशि। निश्चित-बिंदु संख्या प्रतिनिधित्व अक्सर अधिक जटिल और कम्प्यूटेशनल रूप से मांग वाले फ़्लोटिंग-पॉइंट अंकगणित | फ़्लोटिंग-पॉइंट प्रतिनिधित्व के विपरीत होता है।
निश्चित-बिंदु प्रतिनिधित्व में, अंश को अक्सर पूर्णांक भाग के समान मूलांक में व्यक्त किया जाता है, लेकिन आधार बी के नकारात्मक घातांक का उपयोग करके। सबसे आम प्रकार दशमलव (आधार 10) और बाइनरी संख्या (आधार 2) हैं। उत्तरार्द्ध को आमतौर पर बाइनरी स्केलिंग के रूप में भी जाना जाता है। इस प्रकार, यदि n भिन्न अंक संग्रहीत हैं, तो मान हमेशा b का पूर्णांक गुणज (गणित) होगा−n. निश्चित-बिंदु प्रतिनिधित्व का उपयोग पूर्णांक मानों के निम्न-क्रम अंकों को छोड़ने के लिए भी किया जा सकता है, उदाहरण के लिए जब बड़े डॉलर मूल्यों को $1000 के गुणज के रूप में दर्शाया जाता है।
जब दशमलव निश्चित-बिंदु संख्याओं को मानव पढ़ने के लिए प्रदर्शित किया जाता है, तो अंश अंकों को आमतौर पर दशमलव विभाजक द्वारा पूर्णांक भाग से अलग किया जाता है (आमतौर पर अंग्रेजी में '.', लेकिन कई अन्य भाषाओं में ',' या कुछ अन्य प्रतीक)। हालाँकि, आंतरिक रूप से, कोई अलगाव नहीं है, और अंकों के दो समूहों के बीच अंतर केवल उन प्रोग्रामों द्वारा परिभाषित किया जाता है जो ऐसी संख्याओं को संभालते हैं।
यांत्रिक कैलकुलेटर में निश्चित-बिंदु प्रतिनिधित्व आदर्श था। चूंकि अधिकांश आधुनिक केंद्रीय प्रसंस्करण इकाइयों में तेज़ फ़्लोटिंग-पॉइंट इकाई (एफपीयू) होती है, इसलिए निश्चित-बिंदु प्रतिनिधित्व का उपयोग अब केवल विशेष स्थितियों में किया जाता है, जैसे कि कम लागत वाले अंतः स्थापित प्रणाली माइक्रोप्रोसेसर और microcontroller में; उन अनुप्रयोगों में जो उच्च गति और/या कम बिजली की खपत और/या छोटे एकीकृत सर्किट क्षेत्र की मांग करते हैं, जैसे मूर्ति प्रोद्योगिकी , वीडियो प्रसंस्करण और अंकीय संकेत प्रक्रिया ; या जब उनका उपयोग समस्या के लिए अधिक स्वाभाविक हो। उत्तरार्द्ध के उदाहरण डॉलर की रकम का लेखा-जोखा है, जब सेंट के अंशों को कड़ाई से निर्धारित तरीकों से पूरे सेंट में पूर्णांकित किया जाना चाहिए; और तालिका देखो द्वारा फ़ंक्शन (गणित) का मूल्यांकन।
प्रतिनिधित्व
Value represented |
Internal representation |
---|---|
0.00 | 0 |
0.5 | 50 |
0.99 | 99 |
2 | 200 |
−14.1 | −1410 |
314.160 | 31416 |
भिन्नात्मक संख्या का निश्चित-बिंदु प्रतिनिधित्व अनिवार्य रूप से पूर्णांक है जिसे निश्चित स्केलिंग कारक द्वारा अंतर्निहित रूप से गुणा किया जाना है। उदाहरण के लिए, मान 1.23 को 1/1000 के अंतर्निहित स्केलिंग कारक के साथ पूर्णांक मान 1230 के रूप में चर में संग्रहीत किया जा सकता है (जिसका अर्थ है कि अंतिम 3 दशमलव अंकों को परोक्ष रूप से दशमलव अंश माना जाता है), और मान 1 230 000 को 1000 के अंतर्निहित स्केलिंग कारक के साथ 1230 के रूप में दर्शाया जा सकता है (शून्य से 3 निहित दशमलव अंश अंकों के साथ, यानी दाईं ओर 3 अंतर्निहित शून्य अंकों के साथ)। यह प्रतिनिधित्व मानक पूर्णांक अंकगणितीय तर्क इकाई को तर्कसंगत संख्या गणना करने की अनुमति देता है।
नकारात्मक मान आमतौर पर बाइनरी फिक्स्ड-पॉइंट प्रारूप में उपरोक्त के रूप में अंतर्निहित स्केलिंग कारक के साथ दो के पूरक प्रतिनिधित्व में हस्ताक्षरित पूर्णांक के रूप में दर्शाए जाते हैं। मान का चिह्न हमेशा बिट क्रमांकन (1 = नकारात्मक, 0 = गैर-नकारात्मक) द्वारा दर्शाया जाएगा, भले ही अंश बिट्स की संख्या बिट्स की कुल संख्या से अधिक या उसके बराबर हो। उदाहरण के लिए, 8-बिट हस्ताक्षरित बाइनरी पूर्णांक (11110101)2 = −11, -3, +5, और +12 निहित अंश बिट्स के साथ लिया गया, मान −11/2 का प्रतिनिधित्व करेगा−3 = −88, −11/25 = −0.343 75, और −11/212 = −0.002 685 546 875, क्रमश।
वैकल्पिक रूप से, नकारात्मक मानों को संकेत-परिमाण प्रारूप में पूर्णांक द्वारा दर्शाया जा सकता है, जिस स्थिति में संकेत को कभी भी निहित अंश बिट्स की संख्या में शामिल नहीं किया जाता है। यह संस्करण आमतौर पर दशमलव निश्चित-बिंदु अंकगणित में अधिक उपयोग किया जाता है। इस प्रकार हस्ताक्षरित 5-अंकीय दशमलव पूर्णांक (−00025)10, -3, +5, और +12 निहित दशमलव अंश अंकों के साथ लिया गया, मान -25/10 का प्रतिनिधित्व करेगा−3 = −25000, −25/105 = −0.00025, और −25/1012 = −0.000 000 000 025, क्रमश।
एक प्रोग्राम आमतौर पर यह मान लेगा कि सभी निश्चित-बिंदु मान जो किसी दिए गए चर में संग्रहीत किए जाएंगे, या किसी दिए गए निर्देश (कंप्यूटिंग) द्वारा उत्पादित किए जाएंगे, उनका स्केलिंग कारक समान होगा। यह पैरामीटर आमतौर पर प्रोग्रामर द्वारा आवश्यक सटीकता और परिशुद्धता और संग्रहीत किए जाने वाले मानों की सीमा के आधार पर चुना जा सकता है।
किसी चर या सूत्र का स्केलिंग कारक प्रोग्राम में स्पष्ट रूप से प्रकट नहीं हो सकता है। सॉफ्टवेयर इंजीनियरिंग के लिए आवश्यक है कि इसे सॉफ़्टवेयर दस्तावेज़ीकरण में, कम से कम स्रोत कोड में टिप्पणी (कंप्यूटिंग) के रूप में प्रदान किया जाए।
स्केलिंग कारकों का चयन
अधिक दक्षता के लिए, स्केलिंग कारकों को अक्सर आंतरिक रूप से पूर्णांकों का प्रतिनिधित्व करने के लिए उपयोग किए जाने वाले आधार बी के घातांक (सकारात्मक या नकारात्मक) के रूप में चुना जाता है। हालाँकि, अक्सर सबसे अच्छा स्केलिंग कारक एप्लिकेशन द्वारा निर्धारित होता है। इस प्रकार व्यक्ति अक्सर मानवीय सुविधा के लिए 10 की घात वाले स्केलिंग कारकों का उपयोग करता है (उदाहरण के लिए डॉलर के मूल्यों के लिए 1/100), तब भी जब पूर्णांकों को बाइनरी में आंतरिक रूप से दर्शाया जाता है। दशमलव स्केलिंग कारक भी इकाइयों की अंतर्राष्ट्रीय प्रणाली | मीट्रिक (एसआई) प्रणाली के साथ अच्छी तरह से मेल खाते हैं, क्योंकि निश्चित-बिंदु स्केलिंग कारक की पसंद अक्सर माप की इकाई (जैसे मीटर के बजाय सेंटीमीटर या माइक्रोमीटर) की पसंद के बराबर होती है।
हालाँकि, अन्य स्केलिंग कारकों का उपयोग कभी-कभी किया जा सकता है, जैसे घंटों की आंशिक मात्रा को सेकंड की पूर्णांक संख्या के रूप में दर्शाया जा सकता है; अर्थात् 1/3600 के स्केल फैक्टर के साथ निश्चित-बिंदु संख्या के रूप में।
यहां तक कि सबसे सावधानीपूर्वक गोलाई के साथ, स्केलिंग कारक एस के साथ दर्शाए गए निश्चित-बिंदु मानों में संग्रहीत पूर्णांक में ±0.5 तक की त्रुटि हो सकती है, यानी मान में ±0.5 एस। इसलिए, छोटे स्केलिंग कारक आम तौर पर अधिक सटीक परिणाम उत्पन्न करते हैं।
दूसरी ओर, छोटे स्केलिंग कारक का मतलब मूल्यों की छोटी श्रृंखला है जिसे किसी दिए गए प्रोग्राम चर में संग्रहीत किया जा सकता है। अधिकतम निश्चित-बिंदु मान जिसे चर में संग्रहीत किया जा सकता है वह सबसे बड़ा पूर्णांक मान है जिसे इसमें संग्रहीत किया जा सकता है, स्केलिंग कारक द्वारा गुणा किया जा सकता है; और इसी प्रकार न्यूनतम मूल्य के लिए भी। उदाहरण के लिए, नीचे दी गई तालिका निहित स्केलिंग कारक एस, न्यूनतम और अधिकतम प्रतिनिधित्व योग्य मान वी देती हैmin और वीmax, और मूल्यों की सटीकता δ = S/2 जिसे 16-बिट हस्ताक्षरित बाइनरी निश्चित बिंदु प्रारूप में दर्शाया जा सकता है, जो निहित अंश बिट्स की संख्या f पर निर्भर करता है।
f | S | δ | Vmin | Vmax |
---|---|---|---|---|
−3 | 1/2−3 = 8 | 4 | −262 144 | +262 143 |
0 | 1/20 = 1 | 0.5 | −32 768 | +32 767 |
5 | 1/25 = 1/32 | < 0.016 | −1024.000 00 | +1023.968 75 |
14 | 1/214 = 1/16 384 | < 0.000 031 | −2.000 000 000 000 00 | +1.999 938 964 843 75 |
15 | 1/215 = 1/32 768 | < 0.000 016 | −1.000 000 000 000 000 | +0.999 969 482 421 875 |
16 | 1/216 = 1/65 536 | < 0.000 008 | −0.500 000 000 000 000 0 | +0.499 984 741 210 937 5 |
20 | 1/220 = 1/1 048 576 | < 0.000 000 5 | −0.031 250 000 000 000 000 00 | +0.031 249 046 325 683 593 75 |
प्रपत्र 2 के स्केलिंग कारकों के साथ निश्चित-बिंदु प्रारूपn-1 (अर्थात् 1, 3, 7, 15, 31, आदि) को इमेज प्रोसेसिंग और अन्य डिजिटल सिग्नल प्रोसेसिंग कार्यों के लिए उपयुक्त कहा गया है। उनसे अपेक्षा की जाती है कि वे सामान्य 2 की तुलना में निश्चित और फ़्लोटिंग-पॉइंट मानों के बीच अधिक सुसंगत रूपांतरण प्रदान करेंn स्केलिंग। जूलिया (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा दोनों संस्करणों को लागू करती है।[1]
सटीक मान
कोई भी द्विआधारी अंश a/2एम, जैसे 1/16 या 17/32, को निश्चित-बिंदु में सटीक रूप से दर्शाया जा सकता है, दो की शक्ति वाले स्केलिंग कारक 1/2 के साथnकिसी भी n ≥ m के साथ। हालाँकि, अधिकांश दशमलव अंश जैसे 0.1 या 0.123 आधार 2 में अनंत दोहराव वाले अंश हैं और इसलिए उन्हें इस तरह प्रदर्शित नहीं किया जा सकता है।
इसी प्रकार, कोई भी दशमलव अंश a/10एम, जैसे कि 1/100 या 37/1000, को पावर-दस स्केलिंग फैक्टर 1/10 के साथ निश्चित बिंदु में सटीक रूप से दर्शाया जा सकता हैnकिसी भी n ≥ m के साथ। यह दशमलव प्रारूप किसी बाइनरी अंश a/2 का भी प्रतिनिधित्व कर सकता हैमी, जैसे 1/8 (0.125) या 17/32 (0.53125)।
अधिक आम तौर पर, ए और बी सहअभाज्य पूर्णांक और बी सकारात्मक के साथ तर्कसंगत संख्या ए/बी को बाइनरी निश्चित बिंदु में सटीक रूप से दर्शाया जा सकता है यदि बी 2 की शक्ति है; और दशमलव निश्चित बिंदु में केवल तभी यदि b में 2 और/या 5 के अलावा कोई अभाज्य संख्या गुणनखंड न हो।
फ़्लोटिंग-पॉइंट के साथ तुलना
फिक्स्ड-पॉइंट संगणनाएं तेज़ हो सकती हैं और/या फ़्लोटिंग-पॉइंट की तुलना में कम हार्डवेयर का उपयोग कर सकती हैं। यदि प्रस्तुत किए जाने वाले मानों की सीमा पहले से ज्ञात हो और पर्याप्त रूप से सीमित हो, तो निश्चित बिंदु उपलब्ध बिट्स का बेहतर उपयोग कर सकता है। उदाहरण के लिए, यदि 0 और 1 के बीच की संख्या को दर्शाने के लिए 32 बिट उपलब्ध हैं, तो निश्चित-बिंदु प्रतिनिधित्व में 1.2 × 10 से कम त्रुटि हो सकती है।−10, जबकि मानक फ़्लोटिंग-पॉइंट प्रतिनिधित्व में 596 × 10 तक त्रुटि हो सकती है−10 - क्योंकि 9 बिट्स गतिशील स्केलिंग कारक के संकेत और प्रतिपादक के साथ बर्बाद हो जाते हैं। विशेष रूप से, 32-बिट फिक्स्ड-प्वाइंट की तुलना आईईईई 754|फ्लोटिंग-प्वाइंट ऑडियो से करने पर, 40 डेसिबल से कम हेडरूम (ऑडियो सिग्नल प्रोसेसिंग) की आवश्यकता वाली रिकॉर्डिंग में 32-बिट फिक्स्ड का उपयोग करके उच्च सिग्नल-टू-शोर अनुपात होता है।
फिक्स्ड-पॉइंट गणनाओं का उपयोग करने वाले प्रोग्राम आमतौर पर फ़्लोटिंग-पॉइंट का उपयोग करने वालों की तुलना में अधिक पोर्टेबल होते हैं, क्योंकि वे एफपीयू की उपलब्धता पर निर्भर नहीं होते हैं। आईईईई फ़्लोटिंग पॉइंट मानक को व्यापक रूप से अपनाए जाने से पहले यह लाभ विशेष रूप से मजबूत था, जब ही डेटा के साथ फ़्लोटिंग-पॉइंट गणना निर्माता के आधार पर और अक्सर कंप्यूटर मॉडल के आधार पर अलग-अलग परिणाम देती थी।
कई एम्बेडेड प्रोसेसर में एफपीयू की कमी होती है, क्योंकि पूर्णांक अंकगणितीय इकाइयों को काफी कम तर्क द्वार की आवश्यकता होती है और एफपीयू की तुलना में बहुत छोटे एकीकृत सर्किट क्षेत्र का उपभोग करते हैं; और कम गति वाले उपकरणों पर फ़्लोटिंग-पॉइंट का सॉफ़्टवेयर अनुकरण (कंप्यूटिंग) अधिकांश अनुप्रयोगों के लिए बहुत धीमा होगा। पहले के निजी कंप्यूटर और गेम कंसोल जैसे इंटेल 386 और इंटेल 486 के सीपीयू चिप्स में भी एफपीयू का अभाव था।
किसी भी निश्चित-बिंदु प्रारूप का पूर्ण रिज़ॉल्यूशन (क्रमिक मानों के बीच का अंतर) पूरी रेंज पर स्थिर होता है, अर्थात् स्केलिंग कारक एस। इसके विपरीत, फ़्लोटिंग-पॉइंट प्रारूप का सापेक्ष रिज़ॉल्यूशन उनकी पूरी रेंज पर लगभग स्थिर होता है, भीतर बदलता रहता है आधार बी का कारक; जबकि उनका पूर्ण रिज़ॉल्यूशन परिमाण के कई क्रमों के अनुसार भिन्न होता है, जैसे स्वयं मान।
कई मामलों में, निश्चित-बिंदु गणनाओं की क्वांटिज़ेशन (सिग्नल प्रोसेसिंग) त्रुटियों का विश्लेषण समतुल्य फ़्लोटिंग-पॉइंट गणनाओं की तुलना में आसान होता है। ट्रंकेशन पर रैखिककरण तकनीकों को लागू करना, जैसे कि तड़पना िंग और/या शोर को आकार देना, निश्चित-बिंदु अंकगणित के भीतर अधिक सीधा-आगे है। दूसरी ओर, निश्चित बिंदु के उपयोग के लिए प्रोग्रामर को अधिक देखभाल की आवश्यकता होती है। अतिप्रवाह से बचने के लिए गणना में चर की श्रेणियों और सभी मध्यवर्ती मूल्यों के लिए बहुत सख्त अनुमान की आवश्यकता होती है, और अक्सर उनके स्केलिंग कारकों को समायोजित करने के लिए अतिरिक्त कोड की भी आवश्यकता होती है। फिक्स्ड-पॉइंट प्रोग्रामिंग के लिए सामान्यतः C डेटा प्रकार#मुख्य प्रकार के उपयोग की आवश्यकता होती है। फिक्स्ड-पॉइंट एप्लिकेशन फ़्लोटिंग पॉइंट को ब्लॉक करें का उपयोग कर सकते हैं, जो निश्चित-पॉइंट वातावरण है जिसमें फिक्स्ड-पॉइंट डेटा के प्रत्येक सरणी (ब्लॉक) को ही शब्द में सामान्य घातांक के साथ स्केल किया जाता है।
अनुप्रयोग
दशमलव निश्चित-बिंदु का सामान्य उपयोग मौद्रिक मूल्यों को संग्रहीत करने के लिए होता है, जिसके लिए फ़्लोटिंग-पॉइंट संख्याओं के जटिल गोलाई नियम अक्सर दायित्व होते हैं। उदाहरण के लिए, C में लिखा गया ओपन सोर्स मनी मैनेजमेंट एप्लिकेशन GnuCash, इस कारण से संस्करण 1.6 के रूप में फ्लोटिंग-पॉइंट से फिक्स्ड-पॉइंट पर स्विच हो गया।
बाइनरी फिक्स्ड-पॉइंट (बाइनरी स्केलिंग) का उपयोग 1960 के दशक के अंत से 1980 के दशक तक व्यापक रूप से वास्तविक समय कंप्यूटिंग के लिए किया गया था जो गणितीय रूप से गहन था, जैसे उड़ान सिमुलेशन और परमाणु ऊर्जा संयंत्र नियंत्रण एल्गोरिदम में। यह अभी भी कई डिजिटल सिग्नल प्रोसेसिंग अनुप्रयोगों और कस्टम मेड माइक्रोप्रोसेसरों में उपयोग किया जाता है। कोणों से संबंधित गणनाओं में द्विआधारी कोणीय माप (बीएएम) का उपयोग किया जाएगा।
बाइनरी फिक्स्ड पॉइंट का उपयोग STM32 श्रृंखला CORDIC सह-प्रोसेसरों और JPEG छवियों को संपीड़ित करने के लिए उपयोग किए जाने वाले असतत कोसाइन परिवर्तन (DCT) एल्गोरिदम में किया जाता है।
बिजली मीटर और वास्तविक समय की घड़ियाँ जैसे इलेक्ट्रॉनिक उपकरण अक्सर शुरू की गई त्रुटियों की भरपाई के लिए बहुपद का उपयोग करते हैं, उदाहरण के लिए तापमान या बिजली आपूर्ति वोल्टेज से। गुणांक बहुपद प्रतिगमन द्वारा निर्मित होते हैं। बाइनरी निश्चित बिंदु बहुपद फ़्लोटिंग-पॉइंट की तुलना में सटीकता के अधिक बिट्स का उपयोग कर सकते हैं, और सस्ते सीपीयू का उपयोग करके तेज़ कोड में ऐसा कर सकते हैं। सटीकता, उपकरणों के लिए महत्वपूर्ण, समतुल्य-बिट फ़्लोटिंग-पॉइंट गणनाओं की तुलना में अच्छी तरह से तुलना करती है, यदि निश्चित-बिंदु बहुपदों को गुणनखंडित किया जाता है (उदाहरण के लिए y = d + x(c + x(b + xa))) तो समय की संख्या को कम करने के लिए गोलाई होती है, और निश्चित-बिंदु गुणन गोलाई जोड़ने का उपयोग करते हैं।
संचालन
जोड़ और घटाव
समान अंतर्निहित स्केलिंग कारक के साथ दो मानों को जोड़ने या घटाने के लिए, अंतर्निहित पूर्णांकों को जोड़ना या घटाना पर्याप्त है; परिणाम में उनका सामान्य अंतर्निहित स्केलिंग कारक होगा, इस प्रकार इसे ऑपरेंड के समान प्रोग्राम चर में संग्रहीत किया जा सकता है। ये ऑपरेशन सटीक गणितीय परिणाम देते हैं, जब तक कि कोई अंकगणितीय अतिप्रवाह नहीं होता है - अर्थात, जब तक परिणामी पूर्णांक को प्राप्त प्रोग्राम चर (कंप्यूटिंग) में संग्रहीत किया जा सकता है। यदि मानों में अलग-अलग स्केलिंग कारक हैं, तो उन्हें ऑपरेशन से पहले सामान्य स्केलिंग कारक में परिवर्तित किया जाना चाहिए।
गुणा
दो निश्चित-बिंदु संख्याओं को गुणा करने के लिए, दो अंतर्निहित पूर्णांकों को गुणा करना पर्याप्त है, और मान लें कि परिणाम का स्केलिंग कारक उनके स्केलिंग कारकों का उत्पाद है। परिणाम सटीक होगा, बिना किसी गोलाई के, बशर्ते कि यह प्राप्तकर्ता चर को ओवरफ्लो न करे।
उदाहरण के लिए, संख्या 123 को 1/1000 (0.123) से गुणा करने पर और 25 को 1/10 (2.5) से गुणा करने पर पूर्णांक 123×25 = 3075 प्राप्त होता है, जिसे (1/1000)×(1/10) = 1/10000 से बढ़ाया जाता है। , अर्थात 3075/10000 = 0.3075। अन्य उदाहरण के रूप में, पहली संख्या को 155 से गुणा करने पर अंतर्निहित स्केलिंग कारक (1/1000) × (1/32) = 1/32000 के साथ पूर्णांक 123×155 = 19065 प्राप्त होता है। , अर्थात 19065/32000 = 0.59578125।
बाइनरी में, स्केलिंग फ़ैक्टर का उपयोग करना आम बात है जो दो की शक्ति है। गुणन के बाद, स्केलिंग कारक को दाईं ओर स्थानांतरित करके विभाजित किया जा सकता है। अधिकांश कंप्यूटरों में शिफ्टिंग सरल और तेज़ है। शिफ्टिंग से पहले स्केलिंग फैक्टर के आधे हिस्से का 'राउंडिंग ऐड' जोड़कर राउंडिंग संभव है; प्रमाण: गोल(x/y) = मंजिल(x/y + 0.5) = मंजिल((x + y/2)/y) = शिफ्ट-ऑफ-एन(x + 2^(n-1)) समान विधि किसी भी स्केलिंग में प्रयोग योग्य है।
विभाजन
दो निश्चित-बिंदु संख्याओं को विभाजित करने के लिए, कोई उनके अंतर्निहित पूर्णांकों का पूर्णांक भागफल लेता है, और मानता है कि स्केलिंग कारक उनके स्केलिंग कारकों का भागफल है। सामान्य तौर पर, प्रथम श्रेणी में पूर्णांकन की आवश्यकता होती है और इसलिए परिणाम सटीक नहीं होता है।
उदाहरण के लिए, 3456 को 1/100 (34.56) से विभाजित करने पर और 1234 को 1/1000 (1.234) से विभाजित करने पर स्केल फैक्टर (1/100)/(1/1000) = के साथ पूर्णांक 3456÷1234 = 3 (गोल) प्राप्त होता है। 10, अर्थात, 30। अन्य उदाहरण के रूप में, पहली संख्या को 155 से विभाजित करने पर 1/32 (155/32 = 4.84375) द्वारा स्केल किया गया पूर्णांक 3456÷155 = 22 (गोल) प्राप्त होता है, जिसमें अंतर्निहित स्केलिंग कारक (1/ 100)/(1/32) = 32/100 = 8/25, अर्थात 22×32/100 = 7.04।
यदि परिणाम सटीक नहीं है, तो लाभांश को छोटे स्केलिंग कारक में परिवर्तित करके राउंडिंग द्वारा उत्पन्न त्रुटि को कम किया जा सकता है या समाप्त भी किया जा सकता है। उदाहरण के लिए, यदि r = 1.23 को 1/100 स्केलिंग के साथ 123 के रूप में दर्शाया जाता है, और s = 6.25 को 1/1000 स्केलिंग के साथ 6250 के रूप में दर्शाया जाता है, तो पूर्णांकों का सरल विभाजन स्केलिंग कारक के साथ 123÷6250 = 0 (गोल) प्राप्त करता है ( 1/100)/(1/1000) = 10. यदि r को पहले स्केलिंग फैक्टर 1/1000000 के साथ 1,230,000 में परिवर्तित किया जाता है, तो परिणाम 1,230,000÷6250 = 197 (गोल) स्केल फैक्टर 1/1000 (0.197) के साथ होगा। सटीक मान 1.23/6.25 0.1968 है।
स्केलिंग रूपांतरण
निश्चित-बिंदु कंप्यूटिंग में किसी मान को भिन्न स्केलिंग कारक में परिवर्तित करना अक्सर आवश्यक होता है। यह ऑपरेशन आवश्यक है, उदाहरण के लिए:
- किसी मान को प्रोग्राम वैरिएबल में संग्रहीत करने के लिए जिसमें अलग अंतर्निहित स्केलिंग कारक होता है;
- दो मानों को ही स्केलिंग फ़ैक्टर में परिवर्तित करना, ताकि उन्हें जोड़ा या घटाया जा सके;
- किसी मूल्य को दूसरे से गुणा या विभाजित करने के बाद उसके मूल स्केलिंग कारक को पुनर्स्थापित करना;
- किसी विभाजन के परिणाम की सटीकता में सुधार करना;
- यह सुनिश्चित करने के लिए कि किसी उत्पाद या भागफल का स्केलिंग कारक 10 जैसी साधारण शक्ति हैnया 2n;
- यह सुनिश्चित करने के लिए कि किसी ऑपरेशन के परिणाम को ओवरफ्लो के बिना प्रोग्राम वेरिएबल में संग्रहीत किया जा सकता है;
- निश्चित-बिंदु डेटा को संसाधित करने वाले हार्डवेयर की लागत को कम करना।
किसी संख्या को स्केलिंग कारक आर के साथ निश्चित बिंदु प्रकार से स्केलिंग कारक एस के साथ दूसरे प्रकार में परिवर्तित करने के लिए, अंतर्निहित पूर्णांक को अनुपात आर/एस से गुणा किया जाना चाहिए। इस प्रकार, उदाहरण के लिए, मान 1.23 = 123/100 को स्केलिंग कारक R=1/100 से स्केलिंग कारक S=1/1000 वाले में बदलने के लिए, पूर्णांक 123 को (1/100)/(1/1000) से गुणा किया जाना चाहिए ) = 10, प्रतिनिधित्व 1230/1000 प्राप्त होता है।
यदि स्केलिंग कारक पूर्णांक का प्रतिनिधित्व करने के लिए आंतरिक रूप से उपयोग की जाने वाली आधार की शक्ति है, तो स्केलिंग कारक को बदलने के लिए केवल पूर्णांक के निम्न-क्रम अंकों को छोड़ने या शून्य अंक जोड़ने की आवश्यकता होती है। हालाँकि, इस ऑपरेशन में संख्या का चिह्न सुरक्षित रहना चाहिए। दो के पूरक प्रतिनिधित्व में, इसका अर्थ है अंकगणितीय बदलाव संचालन के रूप में साइन बिट का विस्तार करना।
यदि S, R को विभाजित नहीं करता है (विशेष रूप से, यदि नया स्केलिंग कारक S मूल R से अधिक है), तो नए पूर्णांक को पूर्णांकित करना पड़ सकता है।
विशेष रूप से, यदि r और s अंतर्निहित स्केलिंग कारकों R और S के साथ निश्चित-बिंदु चर हैं, तो ऑपरेशन r ← r×s को संबंधित पूर्णांकों को गुणा करने और परिणाम को S द्वारा स्पष्ट रूप से विभाजित करने की आवश्यकता होती है। परिणाम को गोल करना पड़ सकता है, और अतिप्रवाह हो सकता है तब हो सकती है।
उदाहरण के लिए, यदि सामान्य स्केलिंग कारक 1/100 है, तो 1.23 को 0.25 से गुणा करने पर 123 को 25 से गुणा करने पर 1/10000 के मध्यवर्ती स्केलिंग कारक के साथ 3075 प्राप्त होता है। मूल स्केलिंग कारक 1/100 पर लौटने के लिए, पूर्णांक 3075 को 1/100 से गुणा किया जाना चाहिए, यानी 100 से विभाजित किया जाना चाहिए, जिससे या तो 31 (0.31) या 30 (0.30) प्राप्त हो सके, जो इस्तेमाल की गई गोलाई पर निर्भर करता है। .
इसी तरह, ऑपरेशन r ← r/s के लिए पूर्णांकों को विभाजित करने और भागफल को स्पष्ट रूप से S से गुणा करने की आवश्यकता होगी। पूर्णांकन और/या अतिप्रवाह यहां भी हो सकता है।
फ़्लोटिंग-पॉइंट से और उससे रूपांतरण
किसी संख्या को फ़्लोटिंग पॉइंट से निश्चित पॉइंट में बदलने के लिए, कोई इसे स्केलिंग फ़ैक्टर S से गुणा कर सकता है, फिर परिणाम को निकटतम पूर्णांक में गोल कर सकता है। यह सुनिश्चित करने के लिए ध्यान रखा जाना चाहिए कि परिणाम गंतव्य चर या रजिस्टर में फिट बैठता है। स्केलिंग कारक और भंडारण आकार और रेंज इनपुट संख्याओं के आधार पर, रूपांतरण में कोई राउंडिंग शामिल नहीं हो सकती है।
एक निश्चित-बिंदु संख्या को फ़्लोटिंग-पॉइंट में परिवर्तित करने के लिए, कोई पूर्णांक को फ़्लोटिंग-पॉइंट में परिवर्तित कर सकता है और फिर इसे स्केलिंग कारक एस द्वारा विभाजित कर सकता है। यदि पूर्णांक का पूर्ण मान 2 से अधिक है तो इस रूपांतरण में पूर्णांकन शामिल हो सकता है।24 (बाइनरी सिंगल-प्रिसिजन IEEE फ़्लोटिंग पॉइंट के लिए) या 2 का53(डबल-प्रिसिजन के लिए)। यदि |एस| तो ओवरफ्लो या अधःप्रवाह हो सकता है क्रमशः बहुत बड़ा या बहुत छोटा है।
हार्डवेयर समर्थन
स्केलिंग और पुनर्सामान्यीकरण
विशिष्ट प्रोसेसर के पास निश्चित-बिंदु अंकगणित के लिए विशिष्ट समर्थन नहीं होता है। हालाँकि, बाइनरी अंकगणित वाले अधिकांश कंप्यूटरों में तेज़ बिट शिफ्ट निर्देश होते हैं जो पूर्णांक को 2 की किसी भी शक्ति से गुणा या विभाजित कर सकते हैं; विशेष रूप से, अंकगणितीय बदलाव निर्देश। इन निर्देशों का उपयोग संख्या के चिह्न को संरक्षित करते हुए स्केलिंग कारकों को जल्दी से बदलने के लिए किया जा सकता है जो 2 की घात हैं।
आईबीएम 1620 और बरोज़ मीडियम सिस्टम्स जैसे शुरुआती कंप्यूटरों ने पूर्णांकों के लिए बाइनरी-कोडित दशमलव (बीसीडी) प्रतिनिधित्व का उपयोग किया, अर्थात् आधार 10 जहां प्रत्येक दशमलव अंक स्वतंत्र रूप से 4 बिट्स के साथ एन्कोड किया गया था। कुछ प्रोसेसर, जैसे माइक्रोकंट्रोलर, अभी भी इसका उपयोग कर सकते हैं। ऐसी मशीनों में, दशमलव स्केलिंग कारकों का रूपांतरण बिट शिफ्ट और/या मेमोरी एड्रेस हेरफेर द्वारा किया जा सकता है।
कुछ डीएसपी आर्किटेक्चर विशिष्ट निश्चित-बिंदु प्रारूपों के लिए मूल समर्थन प्रदान करते हैं, उदाहरण के लिए एन-1 अंश बिट्स के साथ हस्ताक्षरित एन-बिट संख्याएं (जिनके मान -1 और लगभग +1 के बीच हो सकते हैं)। समर्थन में गुणा निर्देश शामिल हो सकता है जिसमें पुनर्सामान्यीकरण शामिल है - उत्पाद का 2n−2 से n−1 अंश बिट्स तक स्केलिंग रूपांतरण।[citation needed] यदि सीपीयू वह सुविधा प्रदान नहीं करता है, तो प्रोग्रामर को उत्पाद को बड़े पर्याप्त रजिस्टर या अस्थायी चर में सहेजना होगा, और पुनर्सामान्यीकरण को स्पष्ट रूप से कोड करना होगा।
अतिप्रवाह
अतिप्रवाह तब होता है जब अंकगणितीय ऑपरेशन का परिणाम निर्दिष्ट गंतव्य क्षेत्र में संग्रहीत करने के लिए बहुत बड़ा होता है। जोड़ और घटाव के अलावा, परिणाम के लिए ऑपरेंड की तुलना में बिट अधिक की आवश्यकता हो सकती है। एम और एन बिट्स के साथ दो अहस्ताक्षरित पूर्णांकों के गुणन में, परिणाम में एम+एन बिट्स हो सकते हैं।
अतिप्रवाह के मामले में, उच्च-क्रम बिट्स आमतौर पर खो जाते हैं, क्योंकि अन-स्केल्ड पूर्णांक मॉड्यूलो 2 कम हो जाता हैn जहां n भंडारण क्षेत्र का आकार है। विशेष रूप से, साइन बिट खो जाता है, जो मूल रूप से साइन और मूल्य के परिमाण को बदल सकता है।
कुछ प्रोसेसर हार्डवेयर अतिप्रवाह ध्वज सेट कर सकते हैं और/या ओवरफ़्लो होने पर अपवाद हैंडलिंग उत्पन्न कर सकते हैं। कुछ प्रोसेसर इसके बजाय संतृप्ति अंकगणित प्रदान कर सकते हैं: यदि जोड़ या घटाव का परिणाम अतिप्रवाह होता है, तो वे इसके बजाय सबसे बड़े परिमाण के साथ मूल्य संग्रहीत करते हैं जो प्राप्त क्षेत्र में फिट हो सकता है और सही संकेत हो सकता है।[citation needed]
हालाँकि, ये सुविधाएँ व्यवहार में बहुत उपयोगी नहीं हैं; स्केलिंग कारकों और शब्द आकारों का चयन करना आम तौर पर आसान और सुरक्षित होता है ताकि अतिप्रवाह की संभावना को बाहर रखा जा सके, या ऑपरेशन निष्पादित करने से पहले अत्यधिक मूल्यों के लिए ऑपरेंड की जांच की जा सके।
कंप्यूटर भाषा समर्थन
निश्चित-बिंदु संख्याओं के लिए स्पष्ट समर्थन कुछ कंप्यूटर भाषाओं द्वारा प्रदान किया जाता है, विशेष रूप से PL/I, COBOL, Ada प्रोग्रामिंग भाषा, JOVIAL प्रोग्रामिंग भाषा और कोरल 66। वे बाइनरी या दशमलव स्केलिंग कारक के साथ निश्चित-बिंदु डेटा प्रकार प्रदान करते हैं। कंपाइलर स्वचालित रूप से इन डेटा-प्रकारों पर संचालन करते समय, चर पढ़ते या लिखते समय, या मानों को अन्य डेटा प्रकारों जैसे फ़्लोटिंग-पॉइंट में परिवर्तित करते समय उचित स्केलिंग रूपांतरण करने के लिए कोड उत्पन्न करता है।
उनमें से अधिकांश भाषाएँ 1940 और 1990 के बीच डिज़ाइन की गई थीं। अधिक आधुनिक भाषाएँ आमतौर पर स्केलिंग कारक रूपांतरण के लिए कोई निश्चित-बिंदु डेटा प्रकार या समर्थन प्रदान नहीं करती हैं। यही हाल कई पुरानी भाषाओं का भी है जो अभी भी बहुत लोकप्रिय हैं, जैसे फोरट्रान, सी (प्रोग्रामिंग भाषा) और सी++। कड़ाई से मानकीकृत व्यवहार के साथ तेज़ फ़्लोटिंग-पॉइंट प्रोसेसर की व्यापक उपलब्धता ने बाइनरी फिक्स्ड पॉइंट समर्थन की मांग को काफी कम कर दिया है। इसी तरह, कुछ प्रोग्रामिंग भाषाओं, जैसे सी शार्प लैंग्वेज|सी# और पायथन (प्रोग्रामिंग लैंग्वेज) में दशमलव फ़्लोटिंग पॉइंट के समर्थन ने दशमलव निश्चित-पॉइंट समर्थन की अधिकांश आवश्यकता को हटा दिया है। कुछ स्थितियों में जहां निश्चित-बिंदु संचालन की आवश्यकता होती है, उन्हें प्रोग्रामर द्वारा किसी भी प्रोग्रामिंग भाषा में स्पष्ट स्केलिंग रूपांतरण के साथ कार्यान्वित किया जा सकता है।
दूसरी ओर, सभी रिलेशनल डेटाबेस और SQL नोटेशन निश्चित-बिंदु दशमलव अंकगणित और संख्याओं के भंडारण का समर्थन करते हैं। PostgreSQL में 1000 अंकों तक की संख्याओं के सटीक भंडारण के लिए विशेष संख्यात्मक प्रकार है।[2]
इसके अलावा, 2008 में अंतर्राष्ट्रीय मानक संगठन (आईएसओ) ने एम्बेडेड प्रोसेसर पर चलने वाले प्रोग्रामों के लाभ के लिए सी प्रोग्रामिंग भाषा को निश्चित-बिंदु डेटा प्रकारों के साथ विस्तारित करने का प्रस्ताव जारी किया।[3]इसके अलावा, जीएनयू कंपाइलर संग्रह (जीसीसी) में फिक्स्ड-पॉइंट के लिए कंपाइलर#बैक एंड|बैक-एंड सपोर्ट है।[4][5]
विस्तृत उदाहरण
दशमलव निश्चित बिंदु गुणन
मान लीजिए कि 2 निश्चित बिंदु 3 दशमलव स्थान संख्याओं के साथ निम्नलिखित गुणन है।
ध्यान दें कि चूंकि 3 दशमलव स्थान हैं इसलिए हम पीछे वाले शून्य को कैसे दिखाते हैं। इसे पूर्णांक गुणन के रूप में पुनः चित्रित करने के लिए हमें पहले इससे गुणा करना होगा सभी दशमलव स्थानों को पूर्णांक स्थानों पर ले जाकर, हम गुणा करेंगे उन्हें वापस लाने के लिए समीकरण अब जैसा दिखता है
यदि हम अलग आधार चुनते हैं, विशेष रूप से कंप्यूटिंग के लिए आधार 2, तो यह समान रूप से काम करता है, क्योंकि थोड़ा सा बदलाव 2 के क्रम से गुणा या भाग के समान है। तीन दशमलव अंक लगभग 10 बाइनरी अंकों के बराबर हैं, इसलिए हमें 0.05 को गोल करना चाहिए बाइनरी पॉइंट के बाद 10 बिट्स तक। तब निकटतम सन्निकटन 0.0000110011 है।
इस प्रकार हमारा गुणनफल हो जाता है
यह दशमलव बिंदु के बाद तीन अंकों के साथ 11.023 तक पूर्णांकित होता है।
बाइनरी निश्चित-बिंदु गुणन
16 अंश बिट्स का उपयोग करके बाइनरी निश्चित बिंदु के साथ 1.2 और 5.6 के उत्पाद की गणना करने के कार्य पर विचार करें। दो संख्याओं को दर्शाने के लिए, उन्हें 2 से गुणा किया जाता है16, प्राप्त करना 78 643.2 और 367 001.6; और इन मानों को निकटतम पूर्णांक प्राप्त करते हुए पूर्णांकित करें 78 643 और 367 002. ये संख्याएं दो पूरक हस्ताक्षरित प्रारूप के साथ 32-बिट शब्द में आराम से फिट हो जाएंगी।
इन पूर्णांकों को साथ गुणा करने पर 35-बिट पूर्णांक प्राप्त होता है 28 862 138 286 32 अंश बिट्स के साथ, बिना किसी गोलाई के। ध्यान दें कि इस मान को सीधे 32-बिट पूर्णांक चर में संग्रहीत करने से अतिप्रवाह होगा और सबसे महत्वपूर्ण बिट्स का नुकसान होगा। व्यवहार में, इसे संभवतः हस्ताक्षरित 64-बिट पूर्णांक चर या रजिस्टर (कंप्यूटिंग) में संग्रहीत किया जाएगा।
यदि परिणाम को डेटा के समान प्रारूप में 16 अंश बिट्स के साथ संग्रहीत किया जाना है, तो उस पूर्णांक को 2 से विभाजित किया जाना चाहिए16, जो लगभग देता है 440 401.28, और फिर निकटतम पूर्णांक तक पूर्णांकित किया गया। यह प्रभाव 2 जोड़कर प्राप्त किया जा सकता है15और फिर परिणाम को 16 बिट्स तक स्थानांतरित करना। परिणाम है 440 401, जो मान 6 को दर्शाता है।719 985 961 914 062 5. प्रारूप की सटीकता को ध्यान में रखते हुए, उस मान को 6 के रूप में बेहतर ढंग से व्यक्त किया जाता है।719 986 ± 0.000 008 (ऑपरेंड सन्निकटन से आने वाली त्रुटि की गिनती नहीं)। सही परिणाम 1.2 × 5.6 = 6.72 होगा।
अधिक जटिल उदाहरण के लिए, मान लें कि दो संख्याएँ 1.2 और 5.6 क्रमशः 30 और 20 अंश बिट्स के साथ 32-बिट निश्चित बिंदु प्रारूप में दर्शायी जाती हैं। 2 से स्केलिंग30और 220 देता है 1 288 490 188.8 और 5 872 025.6, वह दौर 1 288 490 189 और 5 872 026, क्रमश। दोनों संख्याएँ अभी भी 32-बिट हस्ताक्षरित पूर्णांक चर में फिट होती हैं, और भिन्नों का प्रतिनिधित्व करती हैं
- 1.200 000 000 186 264 514 923 095 703 125 और
- 5.600 000 381 469 726 562 50
उनका उत्पाद (बिल्कुल) 53-बिट पूर्णांक है 7 566 047 890 552 914, जिसमें 30+20 = 50 निहित अंश बिट्स हैं और इसलिए अंश का प्रतिनिधित्व करता है
- 6.720 000 458 806 753 229 623 609 513 510
यदि हम इस मान को 8 अंश बिट्स के साथ हस्ताक्षरित 16-बिट निश्चित प्रारूप में प्रस्तुत करना चुनते हैं, तो हमें पूर्णांक उत्पाद को 2 से विभाजित करना होगा50-8=242और परिणाम को गोल करें; जिसे 2 जोड़कर प्राप्त किया जा सकता है41और 42 बिट्स द्वारा स्थानांतरण। परिणाम 1720 है, जो मान 1720/2 दर्शाता है8=6.718 75, या लगभग 6.719 ± 0.002।
नोटेशन
निश्चित-बिंदु प्रारूप के मापदंडों को संक्षिप्त रूप से निर्दिष्ट करने के लिए विभिन्न नोटेशन का उपयोग किया गया है। निम्नलिखित सूची में, f भिन्नात्मक बिट्स की संख्या का प्रतिनिधित्व करता है, m परिमाण या पूर्णांक बिट्स की संख्या, s साइन बिट्स की संख्या और b बिट्स की कुल संख्या का प्रतिनिधित्व करता है।
- COBOL प्रोग्रामिंग भाषा मूल रूप से मनमाने आकार और दशमलव स्केलिंग के साथ दशमलव निश्चित-परिशुद्धता का समर्थन करती थी, जिसका प्रारूप ग्राफ़िक रूप से निर्दिष्ट किया गया था PIC निर्देश. उदाहरण के लिए, PIC S9999V99 दो दशमलव अंश अंकों के साथ संकेत-परिमाण 6-अंकीय दशमलव पूर्णांक निर्दिष्ट किया।[6]* निर्माण REAL FIXED BINARY (पी,एफ) का उपयोग पीएल/आई प्रोग्रामिंग भाषा में, अंश भाग में एफ बिट्स के साथ पी कुल बिट्स (चिह्न सहित नहीं) के साथ निश्चित-बिंदु हस्ताक्षरित बाइनरी डेटा प्रकार निर्दिष्ट करने के लिए किया जाता है; यह 1/2 के स्केलिंग कारक के साथ पी+1 बिट हस्ताक्षरित पूर्णांक हैच. उत्तरार्द्ध सकारात्मक या नकारात्मक हो सकता है। कोई निर्दिष्ट कर सकता है COMPLEX के बजाय REAL, और DECIMAL के बजाय BINARY आधार 10 के लिए।
- एडीए प्रोग्रामिंग भाषा में, संख्यात्मक डेटा प्रकार निर्दिष्ट किया जा सकता है, उदाहरण के लिए,
type F is delta 0.01 range -100.0 .. 100.0
, जिसका अर्थ है निश्चित-बिंदु प्रतिनिधित्व जिसमें 7 निहित अंश बिट्स (एक स्केलिंग कारक 1/128 प्रदान करते हुए) और कम से कम 15 बिट्स (-128.00 से लगभग +128.00 तक की वास्तविक सीमा सुनिश्चित करना) के साथ दो के पूरक प्रारूप में हस्ताक्षरित बाइनरी पूर्णांक शामिल है। ).[7]* क्यू (संख्या प्रारूप) को टेक्सस उपकरण ्स द्वारा परिभाषित किया गया था।[8]एक लिखता है Qf अंश बिट्स के साथ हस्ताक्षरित बाइनरी निश्चित-बिंदु मान निर्दिष्ट करने के लिए; उदाहरण के लिए, Q15 स्केलिंग कारक 1/2 के साथ दो के पूरक नोटेशन में हस्ताक्षरित पूर्णांक निर्दिष्ट करता है15. कोड Qएम.एफ अतिरिक्त रूप से निर्दिष्ट करता है कि संख्या में मान के पूर्णांक भाग में एम बिट्स हैं, साइन बिट की गिनती नहीं। इस प्रकार Q1.30 1 पूर्णांक बिट और 30 भिन्नात्मक बिट्स के साथ बाइनरी फिक्स्ड-पॉइंट प्रारूप का वर्णन करेगा, जिसे स्केलिंग कारक 1/2 के साथ 32-बिट 2 के पूरक पूर्णांक के रूप में संग्रहीत किया जा सकता है।30.[8][9]एआरएम वास्तुकला द्वारा समान नोटेशन का उपयोग किया गया है, सिवाय इसके कि वे एम के मूल्य में साइन बिट की गणना करते हैं; इसलिए उपरोक्त वही प्रारूप निर्दिष्ट किया जाएगा Q2.30.[10][11]* संकेतन Bएम का प्रयोग किया गया है पूर्णांक भाग में एम बिट्स के साथ निश्चित बाइनरी प्रारूप का मतलब है; शेष शब्द अंश अंश हैं। उदाहरण के लिए, अधिकतम और न्यूनतम मान जिन्हें किसी हस्ताक्षरित में संग्रहीत किया जा सकता है B16 संख्याएँ क्रमशः ≈32767.9999847 और −32768.0 हैं। - VisSim कंपनी का उपयोग किया गया fxएम.बी पूर्णांक भाग में बी कुल बिट्स और एम बिट्स के साथ बाइनरी निश्चित-बिंदु मान को दर्शाने के लिए; अर्थात्, स्केलिंग कारक 1/2 के साथ बी-बिट पूर्णांकb−m. इस प्रकार fx1.16 का मतलब 16-बिट संख्या होगा जिसमें पूर्णांक भाग में 1 बिट और अंश में 15 होगा।[12]* PlayStation 2 GS (PlayStation 2 तकनीकी विनिर्देश#ग्राफ़िक्स प्रोसेसिंग यूनिट| ग्राफ़िक्स सिंथेसाइज़र) उपयोगकर्ता गाइड नोटेशन का उपयोग करता है:एम:f, जहां s साइन बिट की उपस्थिति (0 या 1) निर्दिष्ट करता है।[13]उदाहरण के लिए, 0:5:3 1/2 के स्केलिंग कारक के साथ अहस्ताक्षरित 8-बिट पूर्णांक का प्रतिनिधित्व करता है3.
- लैबव्यू प्रोग्रामिंग भाषा नोटेशन का उपयोग करती है <एस,बी,एम> 'एफएक्सपी' निश्चित बिंदु संख्याओं के पैरामीटर निर्दिष्ट करने के लिए। एस घटक या तो '+' या '±' हो सकता है, जो क्रमशः अहस्ताक्षरित या 2 के पूरक हस्ताक्षरित संख्या को दर्शाता है। बी घटक बिट्स की कुल संख्या है, और एम पूर्णांक भाग में बिट्स की संख्या है।
सॉफ़्टवेयर अनुप्रयोग उदाहरण
- लोकप्रिय ट्रू टाइप फ़ॉन्ट प्रारूप अपने निर्देशों में कुछ संख्यात्मक मानों के लिए दशमलव के बाईं ओर 26 बिट्स के साथ 32-बिट हस्ताक्षरित बाइनरी फिक्स्ड-पॉइंट का उपयोग करता है।[14]फ़ॉन्ट संकेत और प्रदर्शन कारणों से आवश्यक न्यूनतम मात्रा में सटीकता प्रदान करने के लिए इस प्रारूप को चुना गया था।[15]* 3DO इंटरएक्टिव मल्टीप्लेयर, प्ले स्टेशन , अब शनि और अटारी जगुआर सहित वीडियो गेम कंसोल की पांचवीं पीढ़ी के लिए सभी 3D गेम,[16]छठी पीढ़ी के खेल घन के अलावा, फिक्स्ड-पॉइंट अंकगणित का उपयोग करें, क्योंकि सिस्टम में हार्डवेयर फ्लोट-पॉइंट इकाइयों की कमी है। प्लेस्टेशन ट्रांसफॉर्मेशन कोप्रोसेसर 12 अंश बिट्स के साथ 16-बिट फिक्स्ड पॉइंट का समर्थन करता है।
- वैज्ञानिकों और गणितज्ञों द्वारा व्यापक रूप से उपयोग किया जाने वाला TeX टाइपसेटिंग सॉफ़्टवेयर, सभी स्थिति गणनाओं के लिए 16 अंश बिट्स के साथ 32-बिट हस्ताक्षरित बाइनरी निश्चित बिंदु का उपयोग करता है। मानों की व्याख्या बिंदु (टाइपोग्राफी)|टाइपोग्राफर के बिंदु के अंशों के रूप में की जाती है। TeX फ़ॉन्ट मीट्रिक फ़ाइलें 12 अंश बिट्स के साथ 32-बिट हस्ताक्षरित निश्चित-बिंदु संख्याओं का उपयोग करती हैं।
- कंपकंपी (सॉफ्टवेयर) , टोस्ट (जीएसएम) और एमपीईजी ऑडियो डिकोडर सॉफ्टवेयर लाइब्रेरी हैं जो क्रमशः वॉर्बिस, पूर्ण दर और बिका हुआ ऑडियो प्रारूपों को डिकोड करते हैं। ये कोडेक्स निश्चित-बिंदु अंकगणित का उपयोग करते हैं क्योंकि कई ऑडियो डिकोडिंग हार्डवेयर उपकरणों में एफपीयू नहीं होता है।
- WavPack दोषरहित ऑडियो कंप्रेसर निश्चित बिंदु अंकगणित का उपयोग करता है। अन्य बातों के अलावा, यह चुनाव इस चिंता से उचित था कि विभिन्न हार्डवेयर में अलग-अलग फ़्लोटिंग-पॉइंट राउंडिंग नियम संपीड़न की दोषरहित प्रकृति को दूषित कर सकते हैं।[17]* नेस्ट लैब्स यूटिलिटीज लाइब्रेरी,[18]निश्चित बिंदु संख्याओं के लिए मैक्रोज़ और फ़ंक्शंस का सीमित सेट प्रदान करता है, खासकर जब सेंसर सैंपलिंग और सेंसर आउटपुट के संदर्भ में उन संख्याओं से निपटते हैं।
- ओपनजीएल एन 1.x विनिर्देश में निश्चित बिंदु प्रोफ़ाइल शामिल है, क्योंकि यह एम्बेडेड सिस्टम के लिए एपीआई है, जिसमें हमेशा एफपीयू नहीं होता है।
- डीसी (कंप्यूटर प्रोग्राम) और बीसी प्रोग्रामिंग भाषा प्रोग्राम मनमाना-सटीक अंकगणितीय कैलकुलेटर हैं, लेकिन केवल भिन्नात्मक अंकों की (उपयोगकर्ता-निर्दिष्ट) निश्चित संख्या का ट्रैक रखते हैं।
- फ़्रैक्टिंट संख्याओं को Q (संख्या प्रारूप) के रूप में दर्शाता है|Q2.29 निश्चित-बिंदु संख्याएँ,[19]Intel 80386 या Intel 80486SX प्रोसेसर वाले पुराने पीसी पर ड्राइंग को तेज़ करने के लिए, जिसमें FPU की कमी थी।
- डूम (1993 वीडियो गेम) आईडी सॉफ्टवेयर द्वारा मैप सिस्टम, ज्योमेट्री, रेंडरिंग और प्लेयर मूवमेंट सहित अपने सभी गैर-पूर्णांक संगणनाओं के लिए 16.16 निश्चित बिंदु प्रतिनिधित्व का उपयोग करने वाला आखिरी प्रथम-व्यक्ति शूटर गेम था। यह प्रतिनिधित्व अभी भी डूम स्रोत पोर्ट्स की आधुनिक सूची में उपयोग किया जाता है।
- Microsoft Azure कंप्यूटर जितना ों के लिए Q शार्प|Q# प्रोग्रामिंग भाषा, जो क्वांटम लॉजिक गेट्स को लागू करती है, में क्वैबिट के क्वांटम रजिस्टर पर निश्चित-बिंदु अंकगणित करने के लिए मानक संख्यात्मक पुस्तकालय शामिल है।[20]
यह भी देखें
- क्यू (संख्या प्रारूप)
- लिबफिक्समैथ - निश्चित-बिंदु गणित के लिए सी में लिखी गई लाइब्रेरी
- लघुगणकीय संख्या प्रणाली
- मिनीफ्लोट
फ़्लोटिंग-पॉइंट स्केलिंग को ब्लॉक करें को ब्लॉक करें
- मोडुलो ऑपरेशन
- μ-कानून एल्गोरिथ्म
- ए-लॉ एल्गोरिदम
संदर्भ
- ↑ Julia programming language documentation FixedPointNumbers package.
- ↑ PostgreSQL manual, section 8.1.2. Arbitrary Precision Numbers
- ↑ JTC1/SC22/WG14 (2008), status of TR 18037: Embedded C
- ↑ GCC wiki, Fixed-Point Arithmetic Support
- ↑ Using GCC, section 5.13 Fixed-Point Types
- ↑ IBM Corporation, "Numeric items". Online documentation site, accessed on 2021-07-05.
- ↑ Ada 83 documentation: "Rationale, 5.3.2: Fixed Point Types". Accessed on 2021-07-05.
- ↑ 8.0 8.1 "Appendix A.2". TMS320C64x DSP Library Programmer's Reference (PDF). Dallas, Texas, USA: Texas Instruments Incorporated. October 2003. SPRU565. Archived (PDF) from the original on 2022-12-22. Retrieved 2022-12-22.
- ↑ "MathWorks Fixed-Point Toolbox Documentation Glossary". mathworks.com.
- ↑ "ARM Developer Suite AXD and armsd Debuggers Guide". 1.2. ARM Limited. 2001 [1999]. Chapter 4.7.9. AXD > AXD Facilities > Data formatting > Q-format. ARM DUI 0066D. Archived from the original on 2017-11-04.
- ↑ "Chapter 4.7.9. AXD > AXD Facilities > Data formatting > Q-format". RealView Development Suite AXD and armsd Debuggers Guide (PDF). 3.0. ARM Limited. 2006 [1999]. pp. 4–24. ARM DUI 0066G. Archived (PDF) from the original on 2017-11-04.
- ↑ "VisSim is now solidThinking Embed". www.vissim.com. solidThinking Inc.
- ↑ PS2 GS User's Guide, Chapter 7.1 "Explanatory Notes"
- ↑ "The TrueType Instruction Set: Data types".
- ↑ "[Freetype] Why 26.6 ?".
- ↑ "Dolphin Emulator". Dolphin Emulator. 2014-03-15.
- ↑ "WavPack Technical Description". www.wavpack.com. Retrieved 2015-07-13.
- ↑ Nest Labs Utilities library
- ↑ "Fractint, A Little Code". Archived from the original on 2010-10-27. Retrieved 2005-10-24.
- ↑ "Introduction to the Quantum Numerics Library". Retrieved 2019-11-13.
अग्रिम पठन
- Warren, Jr., Henry S. (2013). Hacker's Delight (2 ed.). Addison Wesley / Pearson Education, Inc. ISBN 978-0-321-84268-8.