एक एकल परिशुद्धता और डबल सटीक फ़्लोटिंग पॉइंट ऑपरेशन के बीच क्या अंतर है?


168

एकल परिशुद्धता फ्लोटिंग पॉइंट ऑपरेशन और डबल प्रिसिजन फ़्लोटिंग ऑपरेशन में क्या अंतर है?

मुझे वीडियो गेम कंसोल के संबंध में व्यावहारिक रूप से दिलचस्पी है। उदाहरण के लिए, क्या निनटेंडो 64 में 64 बिट प्रोसेसर है और अगर ऐसा होता है तो क्या इसका मतलब यह होगा कि यह दोहरी परिशुद्धता फ्लोटिंग पॉइंट ऑपरेशंस में सक्षम है? क्या PS3 और Xbox 360 डबल फ़्लोटिंग फ़्लोटिंग पॉइंट ऑपरेशंस या केवल एकल परिशुद्धता और सामान्य उपयोग में खींच सकते हैं (क्या वे मौजूद हैं)?


17
तथ्य यह है कि सीपीयू 64-बिट है आमतौर पर इसका मतलब है कि सीपीयू में 64-बिट सामान्य प्रयोजन रजिस्टर (यानी पूर्णांक) और मेमोरी एड्रेस का आकार है । लेकिन यह फ्लोटिंग पॉइंट मैथ के बारे में कुछ नहीं कहता है। उदाहरण के लिए, इंटेल आईए -32 सीपीयू 32-बिट हैं, लेकिन वे मूल रूप से दोहरे परिशुद्धता फ्लोट का समर्थन करते हैं।
रोमन ज़ालोव

जवाबों:


215

नोट: निंटेंडो 64 में 64-बिट प्रोसेसर है, हालांकि:

कई गेमों ने चिप के 32-बिट प्रसंस्करण मोड का लाभ उठाया क्योंकि 64-बिट डेटा प्रकारों के साथ उपलब्ध अधिक से अधिक डेटा परिशुद्धता आमतौर पर 3 डी गेमों की आवश्यकता नहीं होती है, साथ ही यह तथ्य भी है कि 64-बिट डेटा के प्रसंस्करण में रैम, कैश का दोगुना उपयोग होता है। , और बैंडविड्थ, जिससे समग्र प्रणाली का प्रदर्शन कम हो जाता है।

से Webopedia :

दोहरा परिशुद्धता शब्द कुछ गलत है क्योंकि सटीक वास्तव में डबल नहीं है।
यह शब्द इस तथ्य से व्युत्पन्न है कि एक डबल-सटीक संख्या नियमित फ्लोटिंग-पॉइंट संख्या के रूप में कई बिट्स का उपयोग करती है।
उदाहरण के लिए, यदि किसी एकल-सटीक संख्या में 32 बिट्स की आवश्यकता होती है, तो इसका डबल-सटीक प्रतिरूप 64 बिट्स लंबा होगा।

अतिरिक्त बिट्स न केवल सटीकता को बढ़ाते हैं, बल्कि परिमाण की सीमा को भी दर्शा सकते हैं।
सटीक मात्रा जिसके द्वारा सटीकता और परिमाण की सीमा को बढ़ाया जाता है, यह इस बात पर निर्भर करता है कि फ्लोटिंग-पॉइंट मानों का प्रतिनिधित्व करने के लिए प्रोग्राम किस प्रारूप का उपयोग कर रहा है।
अधिकांश कंप्यूटर IEEE फ़्लोटिंग-पॉइंट प्रारूप के रूप में जाना जाने वाला एक मानक प्रारूप का उपयोग करते हैं।

आईईईई डबल परिशुद्धता प्रारूप वास्तव में है अधिक एकल परिशुद्धता प्रारूप के रूप में परिशुद्धता के कितने बिट, साथ ही एक बहुत बड़ी रेंज के रूप में दो बार से।

अस्थायी बिंदु अंकगणित के लिए IEEE मानक से

एकल परिशुद्धता

IEEE एकल सटीक फ़्लोटिंग पॉइंट मानक प्रतिनिधित्व के लिए एक 32 बिट शब्द की आवश्यकता होती है, जिसे 0 से 31 तक गिना जा सकता है, दाएं से बाएं।

  • पहला बिट साइन बिट है, S,
  • अगले आठ बिट्स प्रतिपादक बिट्स हैं, 'E', और
  • अंतिम 23 बिट्स 'एफ' अंश हैं :

    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
    0 1      8 9                    31
    

शब्द द्वारा दर्शाया गया मान V निम्नानुसार निर्धारित किया जा सकता है:

  • यदि E = 255 और F गैर-शून्य है, तो V = NaN ("संख्या नहीं")
  • यदि E = 255 और F शून्य है और S 1 है, तो V = -Infinity
  • यदि E = 255 और F शून्य है और S 0 है, तो V = Infinity
  • यदि 0<E<255तब V=(-1)**S * 2 ** (E-127) * (1.F)जहां "1.F" का उद्देश्य एफ द्वारा उपसर्ग द्वारा बनाए गए द्विआधारी संख्या का प्रतिनिधित्व करना है जिसमें निहित 1 और एक द्विआधारी बिंदु होता है।
  • यदि E = 0 और F नॉनवेज है, तो V=(-1)**S * 2 ** (-126) * (0.F)। ये "अनावश्यक" मूल्य हैं।
  • यदि E = 0 और F शून्य है और S 1 है, तो V = -0 है
  • यदि E = 0 और F शून्य है और S 0 है, तो V = 0 है

विशेष रूप से,

0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0

0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity

0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN

0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127) 
0 00000000 00000000000000000000001 = +1 * 2**(-126) * 
                                     0.00000000000000000000001 = 
                                     2**(-149)  (Smallest positive value)

दोहरी सुनिश्चितता

IEEE डबल सटीक फ़्लोटिंग पॉइंट मानक प्रतिनिधित्व के लिए 64 बिट शब्द की आवश्यकता होती है, जिसे 0 से 63 तक के रूप में दर्शाया जा सकता है, दाएं से बाएं।

  • पहला बिट साइन बिट है, S,
  • अगले ग्यारह बिट्स प्रतिपादक बिट्स हैं, 'E', और
  • अंतिम 52 बिट्स 'एफ' अंश हैं :

    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    0 1        11 12                                                63
    

शब्द द्वारा दर्शाया गया मान V निम्नानुसार निर्धारित किया जा सकता है:

  • यदि E = 2047 और F नॉनवेज है, तो V = NaN ("संख्या नहीं")
  • यदि ई = 2047 और एफ शून्य है और एस 1 है, तो वी = -इनफिनिटी
  • यदि E = 2047 और F शून्य है और S 0 है, तो V = Infinity
  • यदि 0<E<2047तब V=(-1)**S * 2 ** (E-1023) * (1.F)जहां "1.F" का उद्देश्य एफ द्वारा उपसर्ग द्वारा बनाए गए द्विआधारी संख्या का प्रतिनिधित्व करना है जिसमें निहित 1 और एक द्विआधारी बिंदु होता है।
  • यदि E = 0 और F नॉनवेज है, तो V=(-1)**S * 2 ** (-1022) * (0.F)ये "अप्राकृतिक" मान हैं।
  • यदि E = 0 और F शून्य है और S 1 है, तो V = -0 है
  • यदि E = 0 और F शून्य है और S 0 है, तो V = 0 है

संदर्भ:
एएनएसआई / आईईईई मानक 754-1985,
बाइनरी फ्लोटिंग प्वाइंट अंकगणित के लिए मानक।


9
मुझे पता है कि यह आपके स्रोत से है, लेकिन मुझे यह वाक्य पसंद नहीं है: "डबल परिशुद्धता शब्द कुछ गलत बात है क्योंकि सटीक वास्तव में डबल नहीं है।" सिंगल और डबल सटीक इन दिनों आईईईई द्वारा बहुत सार्वभौमिक रूप से परिभाषित किया गया है, और जैसा कि आप बताते हैं कि एकल परिशुद्धता में 23 बिट्स हैं और डबल में 52 बिट्स हैं - यह मूल रूप से सटीक डबल है ...
कार्ल वॉल्श


11
@ कर्लवल्श 52/23! = 2 एर्गो यह "डबल परिशुद्धता" नहीं है
rfoo

@ जोंसन आपके पास easy68k.com/paulrsm/6502/WOZFPPAK.TXT में अप्राकृतिक मूल्यों के बारे में अधिक विवरण है , और stackoverflow.com/a/28801033/6309
Vonc

2
@rfoo यदि आप पांडित्यपूर्ण होना चाहते हैं, तो यह बिल्कुल दोगुना नहीं है , लेकिन 52/2> 23 इसलिए हां, यह सटीक डबल है, यह सिर्फ डबल है और फिर कुछ और है।
JShorthouse

42

मैं बहुत सारे उत्तर पढ़ता हूं लेकिन कोई भी सही ढंग से नहीं बताता है कि डबल शब्द कहां से आता है। मुझे याद है कि कुछ साल पहले मुझे विश्वविद्यालय के एक प्रोफेसर ने बहुत अच्छी व्याख्या दी थी।

VonC के उत्तर की शैली को याद करते हुए, एक एकल सटीक फ़्लोटिंग पॉइंट प्रतिनिधित्व 32 बिट के एक शब्द का उपयोग करता है।

  • संकेत के लिए 1 बिट , एस
  • प्रतिपादक के लिए 8 बिट्स , 'ई'
  • अंश के लिए 24 बिट्स , जिसे मंटिसा भी कहा जाता है , या गुणांक (भले ही सिर्फ 23 का प्रतिनिधित्व किया गया हो)। चलो इसे 'एम' कहते हैं ( मंटिसा के लिए , मुझे यह नाम पसंद है क्योंकि "अंश" गलत समझा जा सकता है)।

प्रतिनिधित्व:

          S  EEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMM
bits:    31 30      23 22                     0

(केवल इंगित करने के लिए, साइन बिट अंतिम है, पहले नहीं।)

एक डबल सटीक फ़्लोटिंग पॉइंट प्रतिनिधित्व 64 बिट के एक शब्द का उपयोग करता है।

  • संकेत के लिए 1 बिट , एस
  • प्रतिपादक के लिए 11 बिट्स , 'ई'
  • अंश के लिए 53 बिट्स / मंटिसा / गुणांक के (भले ही केवल 52 का प्रतिनिधित्व किया गया हो), 'एम'

प्रतिनिधित्व:

           S  EEEEEEEEEEE   MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits:     63 62         52 51                                                  0

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

  • 0.000124 0.124 हो जाता है × 10 -3
  • 237.141 0.237141 × 10 हो जाता है 3

इसका मतलब है कि मंटिसा हमेशा फॉर्म में रहेगी

0.α 1 α 2 ... α t × 2 पी

जहां β प्रतिनिधित्व का आधार है। लेकिन चूंकि अंश एक बाइनरी संख्या है, इसलिए α 1 हमेशा 1 के बराबर होगा, इस प्रकार अंश को 1.α 2 α 3 के रूप में फिर से लिखा जा सकता है ... α t + 1 × 2 p और प्रारंभिक 1 को स्पष्ट रूप से ग्रहण किया जा सकता है, आदि। एक अतिरिक्त बिट के लिए जगह बनाना (α t + 1) )।

अब, यह स्पष्ट रूप से सच है कि 32 का डबल 64 है, लेकिन यह वह जगह नहीं है जहां से शब्द आता है।

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

उस के साथ, दशमलव अंकों की संख्या का अनुमान लगाना आसान है जिसे सुरक्षित रूप से उपयोग किया जा सकता है:

  • एकल परिशुद्धता : लॉग 10 (2 24 ), जो लगभग 7 ~ 8 दशमलव अंक है
  • दोहरी सटीकता : लॉग 10 (2 53 ), जो लगभग 15 ~ 16 दशमलव अंक है

19

ठीक है, मशीन में मूल अंतर यह है कि डबल सटीक एकल के रूप में कई बिट्स का दो बार उपयोग करता है। सामान्य कार्यान्वयन में, सिंगल के लिए 32 बिट्स, डबल के लिए 64 बिट्स हैं।

लेकिन इसका क्या मतलब है ? यदि हम IEEE मानक मानते हैं, तो एक एकल सटीक संख्या में मंटिसा के लगभग 23 बिट्स होते हैं, और अधिकतम 38 के बारे में; डबल परिशुद्धता में मंटिसा के लिए 52 बिट्स हैं, और लगभग 308 की अधिकतम प्रतिपादक है।

विवरण हमेशा की तरह विकिपीडिया पर हैं ।


11

यहाँ सभी अद्भुत उत्तरों को जोड़ने के लिए

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

उदाहरण के लिए: मुझे 123.456789 स्टोर करना होगा एक केवल 123.4567 स्टोर करने में सक्षम हो सकता है, जबकि दूसरा 123.456789 स्टोर करने में सक्षम हो सकता है।

इसलिए, मूल रूप से हम यह जानना चाहते हैं कि संख्या कितनी सही रूप से संग्रहीत की जा सकती है और जिसे हम सटीक कहते हैं।

यहां @Alessandro का हवाला देते हुए

सटीक दशमलव अंकों की संख्या को इंगित करता है जो सही हैं , अर्थात किसी भी प्रकार की प्रतिनिधित्व त्रुटि या सन्निकटन के बिना। दूसरे शब्दों में, यह इंगित करता है कि कितने दशमलव अंक सुरक्षित रूप से उपयोग किए जा सकते हैं।

फ्लोट आंशिक भाग में लगभग 7-8 अंकों को स्टोर कर सकते हैं जबकि डबल आंशिक भाग में लगभग 15-16 अंकों को स्टोर कर सकते हैं

तो, फ्लोट आंशिक भाग की मात्रा को दोगुना कर सकते हैं इसीलिए डबल को डबल फ्लोट कहा जाता है


7

सवाल के रूप में "क्या ps3 और xbxo 360 डबल सटीक फ़्लोटिंग पॉइंट ऑपरेशंस या केवल एकल परिशुद्धता को खींच सकते हैं और जेनरल उपयोग में डबल सटीक क्षमताओं का उपयोग किया जाता है (यदि वे मौजूद हैं?)।"

मेरा मानना ​​है कि दोनों प्लेटफ़ॉर्म डबल फ़्लोटिंग पॉइंट के लिए अक्षम हैं। मूल सेल प्रोसेसर में केवल 32 बिट फ़्लोट थे, एटीआई हार्डवेयर के साथ ही जो कि एक्सबॉक्स 360 (आर 600) पर आधारित है। सेल को बाद में डबल फ़्लोटिंग पॉइंट सपोर्ट मिला, लेकिन मुझे पूरा यकीन है कि PS3 उस चिप्परी का उपयोग नहीं करता है।


5

मूल रूप से एकल परिशुद्धता फ़्लोटिंग पॉइंट अंकगणित 32 बिट फ़्लोटिंग पॉइंट संख्याओं के साथ काम करता है जबकि डबल सटीक 64 बिट के साथ डील करता है।

डबल परिशुद्धता में बिट्स की संख्या अधिकतम मूल्य को बढ़ाती है और साथ ही सटीक (यानी महत्वपूर्ण अंकों की संख्या) को बढ़ाकर संग्रहीत किया जा सकता है।


5

सभी ने बहुत विस्तार से बताया है और कुछ भी नहीं जो मैं आगे जोड़ सकता हूं। हालाँकि मैं इसे आम आदमी की शर्तों या सादे अंग्रेजी में समझाना चाहूँगा

1.9 is less precise than 1.99
1.99 is less precise than 1.999
1.999 is less precise than 1.9999

.....

एक चर, जो "1.9" को स्टोर या प्रतिनिधित्व करने में सक्षम है, 1.9999 को पकड़ने या प्रतिनिधित्व करने में सक्षम की तुलना में कम सटीकता प्रदान करता है। ये अंश बड़ी गणनाओं में एक बड़े अंतर का कारण बन सकते हैं।


2

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

N64 ने MIPS R4300i- आधारित NEC VR4300 का उपयोग किया जो 64 बिट प्रोसेसर है, लेकिन प्रोसेसर 32-बिट चौड़ी बस के बाकी सिस्टम के साथ संचार करता है। इसलिए, अधिकांश डेवलपर्स ने 32 बिट संख्याओं का उपयोग किया क्योंकि वे तेज हैं, और उस समय के अधिकांश गेम को अतिरिक्त परिशुद्धता की आवश्यकता नहीं थी (इसलिए वे फ्लोट्स का उपयोग करते थे युगल नहीं)।

सभी तीन प्रणालियों सकते सिंगल और डबल परिशुद्धता चल संचालन करते हैं, लेकिन वे शायद नहीं प्रदर्शन के कारण। (हालांकि बहुत कुछ के बाद n64 एक 32 बिट बस का इस्तेमाल किया ...)


1

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

उदाहरण के लिए: मुझे 123.456789 स्टोर करना होगा एक केवल 123.4567 स्टोर करने में सक्षम हो सकता है, जबकि अन्य सटीक 123.456789 स्टोर करने में सक्षम हो सकता है।

इसलिए, मूल रूप से हम यह जानना चाहते हैं कि संख्या कितनी सही रूप से संग्रहीत की जा सकती है और जिसे हम सटीक कहते हैं।

यहां @Alessandro का हवाला देते हुए

सटीक दशमलव अंकों की संख्या को इंगित करता है जो सही हैं, अर्थात किसी भी प्रकार की प्रतिनिधित्व त्रुटि या सन्निकटन के बिना। दूसरे शब्दों में, यह इंगित करता है कि कितने दशमलव अंक सुरक्षित रूप से उपयोग किए जा सकते हैं।

फ्लोट आंशिक भाग में लगभग 7-8 अंकों को स्टोर कर सकते हैं जबकि डबल आंशिक भाग में लगभग 15-16 अंकों को स्टोर कर सकते हैं

तो, डबल फ्लोट के रूप में आंशिक भाग की मात्रा को दोगुना कर सकता है। इसीलिए डबल को डबल फ्लोट कहा जाता है


0

IEEE754 के अनुसार • फ्लोटिंग पॉइंट स्टोरेज के लिए स्टैंडर्ड • 32 और 64 बिट स्टैंडर्ड्स (सिंगल प्रिसिजन और डबल प्रिसिजन) • क्रमशः 8 और 11 बिट एक्सपेंसरेंट। इंटरमीडिएट के रिजल्ट के लिए एक्सटेंडेड फॉर्मेट (दोनों मेंटिसा और एक्सपोनेंट)


-3

एकल सटीक संख्या 32 बिट्स का उपयोग करती है, जिसमें MSB साइन बिट है, जबकि डबल सटीक संख्या 64 बिट्स का उपयोग करती है, MSB साइन बिट है

एकल परिशुद्धता

SEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

दोहरी सुनिश्चितता:

SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.(SIGN+EXPONENT+SIGNIFICAND)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.