2013-11-21 4 views
5

सी ++ में, double डिफ़ॉल्ट रूप से float या long double का उपयोग करना बेहतर है जब हम वास्तव में जानते हैं कि हमें उनकी आवश्यकता है। हालांकि OpenGL के लिए, मुझे लगता है कि GLfloat डिफ़ॉल्ट प्रतीत होता है। क्या यह अभी भी प्रासंगिक है कि नए जीपीयू पर डबल परिशुद्धता अब आम है?डिफ़ॉल्ट रूप से GLfloat या GLdouble?

+1

डबल-परिशुद्धता वास्तव में "सामान्य" नहीं है। नवीनतम हार्डवेयर इसका समर्थन करता है, लेकिन जीपीजीपीयू अनुप्रयोगों से कम इसका कोई तत्काल उपयोग नहीं है। यह सचमुच भंडारण आवश्यकताओं को दोगुना करता है, जिसका अर्थ है कि 'dvec4' उदाहरण के लिए' vec4' के रूप में कई vertex attrib स्लॉट दो गुना लेता है। यदि आप डबल-परिशुद्धता का उपयोग करते हैं, तो आप मेमोरी और जीएलएसएल कार्यान्वयन सीमा के अनुसार संसाधनों से बाहर हो जाते हैं। आप अन्य चीजों के साथ डबल-परिशुद्धता पर बनावट का नमूना भी नहीं लगा सकते हैं। पाइपलाइन का केवल * भाग * डबल-परिशुद्धता का समर्थन करता है, और यह ज्यादातर हिस्सा है जो संख्याओं को क्रंच करता है। –

उत्तर

8

विपरीत मामला है। आपको C++ में डिफ़ॉल्ट रूप से float का उपयोग करना चाहिए और केवल double का उपयोग करना चाहिए यदि आप सकारात्मक रूप से सुनिश्चित हैं कि आपको वास्तव में सटीक के उन अतिरिक्त अंकों की आवश्यकता है (कुछ वैज्ञानिक, संभवतः खगोलीय या कण भौतिकी, अनुकरण) के लिए। अक्सर जब आपको लगता है कि आपको double की आवश्यकता है, तो आपको निश्चित बिंदु का उपयोग करना चाहिए, या आपको अपने float मानों को सही सीमा में प्राप्त करना चाहिए।

आप ग्राफिक्स के लिए डबल परिशुद्धता का उपयोग नहीं करते हैं। हालांकि सभी आधुनिक जीपीयू इसका समर्थन करते हैं, ठीक है, डबल परिशुद्धता गणित अक्सर एक परिशुद्धता से धीमा होता है, और इसका कोई अवलोकन लाभ नहीं होता है। "ग्राफिक्स" से संबंधित सबकुछ (या मान लें कि "सबकुछ" के बाद से 99.99% एक निश्चित परिभाषा है) उस मामले के लिए float या GLfloat का उपयोग करके ठीक काम करता है।
कुछ साल पहले जब कुछ जीपीयू केवल 24-बिट परिशुद्धता के साथ काम करते थे, तो कोई अंतर नहीं था।

वास्तव में, जब लोग double का उपयोग करते हैं क्योंकि सोचते हैं, तो 99% बार वे गलत कर रहे हैं।

टॉम फोर्सिथ ने अपने Offend-O-Matic के पहले बिंदु को "डबल परिशुद्धता" भी बनाया। वह विशेष रूप से "गेम" से संबंधित है लेकिन यह वास्तव में लगभग हर सॉफ्टवेयर पर लागू होता है, कुछ वैज्ञानिक सिमुलेशन अपवाद होने के साथ। अपने तर्क को समझने के लिए साथ-साथ लेख A Matter of Precision को भी पढ़ना सुनिश्चित करें।
फ्लोटिंग पॉइंट पर कम आक्रामक अवश्य पढ़ना चाहिए एरिक्सन की epsilon is not 0.000001 प्रस्तुति।

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

चौंकाने वाली बात, यहां तक ​​कि आजकल लोगों को अभी भी डबल परिशुद्धता चल बिन्दु भी मुद्रा या समय की तरह बेतुका कारणों के लिए (क्योंकि यह दुगनी हो जाती सटीक, हाँ? है) और हैरानी होती है कि यह उनके चेहरे में चल रही है और लोगों को चिल्ला शुरू जब का उपयोग उन पर।

+0

"डबल परिशुद्धता गणित अक्सर एक परिशुद्धता से धीमा होता है, और इसका कोई अवलोकन लाभ नहीं होता है"। क्या अापको उस बारे में पूर्ण विशवास है? कम से कम अधिक विवरण दें क्योंकि यह सामान्य मामले में केवल सादा गलत लगता है। – Korchkidu

+0

@ कोर्किकिडू: उदाहरण के लिए देखें [यह] (http://devgurus.amd.com/thread/150557)। साथ ही, 'GLdouble' उदा। वर्टेक्स विशेषताओं के लिए सचमुच पीसीआई बैंडविड्थ आवश्यकताओं और कैश दबाव को दोगुना कर दिया जाएगा। ऑन-स्क्रीन परिणाम वही है, हालांकि (प्रारंभिक एएमडी कार्यान्वयन द्वारा सिद्ध किया गया है जो केवल 24-बिट परिशुद्धता का उपयोग करता है और फिर भी ठीक काम करता है)। – Damon

+1

आपका उदाहरण जीपीयू के बारे में है। लेकिन सामान्य मामले में (सीपीयू पर सी ++), मैंने केवल विपरीत डबल> फ्लोट सुना। GPU और GLfloat/Gldouble के लिए मुझे नहीं पता, यही कारण है कि मैं पूछ रहा हूं। ऐसा लगता है कि GLfloat> Gldouble तो। – Korchkidu

संबंधित मुद्दे