सी ++ में, double
डिफ़ॉल्ट रूप से float
या long double
का उपयोग करना बेहतर है जब हम वास्तव में जानते हैं कि हमें उनकी आवश्यकता है। हालांकि OpenGL के लिए, मुझे लगता है कि GLfloat
डिफ़ॉल्ट प्रतीत होता है। क्या यह अभी भी प्रासंगिक है कि नए जीपीयू पर डबल परिशुद्धता अब आम है?डिफ़ॉल्ट रूप से GLfloat या GLdouble?
उत्तर
विपरीत मामला है। आपको 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
ठीक काम करेगा। एक ट्रांसफॉर्म मैट्रिक्स लागू करते समय गोल करने वाली त्रुटियां या ऐसी दिखाई नहीं दे रही हैं।
यदि आपको समझ में नहीं आता कि यह कैसे काम करता है, तो डबल परिशुद्धता का उपयोग करके समस्याओं को थोड़ा सा पीछे छोड़ दिया जाएगा, लेकिन जब भी आप इसकी अपेक्षा नहीं करेंगे तब भी यह आपको काट देगा।
चौंकाने वाली बात, यहां तक कि आजकल लोगों को अभी भी डबल परिशुद्धता चल बिन्दु भी मुद्रा या समय की तरह बेतुका कारणों के लिए (क्योंकि यह दुगनी हो जाती सटीक, हाँ? है) और हैरानी होती है कि यह उनके चेहरे में चल रही है और लोगों को चिल्ला शुरू जब का उपयोग उन पर।
"डबल परिशुद्धता गणित अक्सर एक परिशुद्धता से धीमा होता है, और इसका कोई अवलोकन लाभ नहीं होता है"। क्या अापको उस बारे में पूर्ण विशवास है? कम से कम अधिक विवरण दें क्योंकि यह सामान्य मामले में केवल सादा गलत लगता है। – Korchkidu
@ कोर्किकिडू: उदाहरण के लिए देखें [यह] (http://devgurus.amd.com/thread/150557)। साथ ही, 'GLdouble' उदा। वर्टेक्स विशेषताओं के लिए सचमुच पीसीआई बैंडविड्थ आवश्यकताओं और कैश दबाव को दोगुना कर दिया जाएगा। ऑन-स्क्रीन परिणाम वही है, हालांकि (प्रारंभिक एएमडी कार्यान्वयन द्वारा सिद्ध किया गया है जो केवल 24-बिट परिशुद्धता का उपयोग करता है और फिर भी ठीक काम करता है)। – Damon
आपका उदाहरण जीपीयू के बारे में है। लेकिन सामान्य मामले में (सीपीयू पर सी ++), मैंने केवल विपरीत डबल> फ्लोट सुना। GPU और GLfloat/Gldouble के लिए मुझे नहीं पता, यही कारण है कि मैं पूछ रहा हूं। ऐसा लगता है कि GLfloat> Gldouble तो। – Korchkidu
- 1. GLfloat के बजाय GLfloat का उपयोग करने के लिए
- 2. GLint और GLfloat क्यों है?
- 3. डिफ़ॉल्ट रूप से क्यूटी निर्माता डिफ़ॉल्ट रूप से या गतिशील रूप से इसके पुस्तकालयों को लिंक करता है?
- 4. डिफ़ॉल्ट रूप से FloatingActionButton
- 5. Selenium2 फ़ायरफ़ॉक्स: डिफ़ॉल्ट रूप से डिफ़ॉल्ट प्रोफ़ाइल
- 6. डिफ़ॉल्ट रूप से रिटर्न सिस्टम.टाइम
- 7. डिफ़ॉल्ट रूप से कॉन्सटेक्स लैम्ब्डा?
- 8. क्या सी # विधि सीलबंद या आभासी डिफ़ॉल्ट रूप से है?
- 9. डिफ़ॉल्ट रूप से जावास्क्रिप्ट सिंक्रोनस (अवरुद्ध) या असीमित (गैर-अवरुद्ध)
- 10. Google Analytics (डिफ़ॉल्ट रूप से)
- 11. , डिफ़ॉल्ट रूप
- 12. डिफ़ॉल्ट लैरवेल एलोक्वेंट मॉडल को डिफ़ॉल्ट रूप से
- 13. डिफ़ॉल्ट रूप से ionicPopover को कैसे दिखाएं
- 14. डिफ़ॉल्ट रूप से हाइबरनेट में ऑप्टिस्टिक लॉकिंग
- 15. डिफ़ॉल्ट रूप से AutoEventWireup = "false" सेट करना
- 16. नाक: डिफ़ॉल्ट रूप से परीक्षण कैसे छोड़ें?
- 17. एसोसिएटिव सरणी डिफ़ॉल्ट रूप से स्थानीय हैं
- 18. डिफ़ॉल्ट रूप से ORACLE 11g केस असंवेदनशील
- 19. सी ++: गतिशील रूप से गैर-डिफ़ॉल्ट निर्माता
- 20. क्या ऑब्जेक्टिव-सी में डिफ़ॉल्ट रूप से इंस्टेंस चर डिफ़ॉल्ट रूप से सेट हैं?
- 21. जीएसओएन अक्षम एचटीएमएलएस्केपिंग - क्यों जीएसओएन एचटीएमएल-डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से बच निकलता है?
- 22. @RequestParam डिफ़ॉल्ट रूप से enum मान को डिफ़ॉल्ट मान
- 23. डिफ़ॉल्ट आईओएस आईपैड सिम्युलेटर डिफ़ॉल्ट रूप से प्रतिक्रियात्मक के साथ
- 24. वाईआई ड्रॉपडाउन सूची डिफ़ॉल्ट मान डिफ़ॉल्ट रूप से
- 25. NuGet पैक: डिफ़ॉल्ट रूप से अनदेखा करें
- 26. एफटीडीआई डिफ़ॉल्ट रूप से पीआईडी बदलें
- 27. एंड्रॉइड: डिफ़ॉल्ट लॉन्चर प्रोग्रामेटिक रूप से
- 28. डिफ़ॉल्ट रूप से प्रोग्रामेटिक समतुल्य (प्रकार)
- 29. डिफ़ॉल्ट रूप से maven2 प्लगइन छोड़ें
- 30. ओपनलेयर: डिफ़ॉल्ट रूप से डबल-क्लिक
डबल-परिशुद्धता वास्तव में "सामान्य" नहीं है। नवीनतम हार्डवेयर इसका समर्थन करता है, लेकिन जीपीजीपीयू अनुप्रयोगों से कम इसका कोई तत्काल उपयोग नहीं है। यह सचमुच भंडारण आवश्यकताओं को दोगुना करता है, जिसका अर्थ है कि 'dvec4' उदाहरण के लिए' vec4' के रूप में कई vertex attrib स्लॉट दो गुना लेता है। यदि आप डबल-परिशुद्धता का उपयोग करते हैं, तो आप मेमोरी और जीएलएसएल कार्यान्वयन सीमा के अनुसार संसाधनों से बाहर हो जाते हैं। आप अन्य चीजों के साथ डबल-परिशुद्धता पर बनावट का नमूना भी नहीं लगा सकते हैं। पाइपलाइन का केवल * भाग * डबल-परिशुद्धता का समर्थन करता है, और यह ज्यादातर हिस्सा है जो संख्याओं को क्रंच करता है। –