2010-11-24 8 views
5

एक एक्सएनए गेम पर काम करना, मैं अपने अधिकांश मूल्य मानों के लिए फ्लोट का उपयोग कर रहा हूं। अधिकांश सी # फ़ंक्शन इनपुट/आउटपुट युगल प्रतीत होते हैं, इसलिए मैं बहुत कुछ लिख रहा हूं (फ्लोट)। क्या मुझे सिर्फ डबल्स का उपयोग करना चाहिए या मैं ठीक से कैसे काम कर रहा हूं?सी # में हर जगह कास्टिंग (फ्लोट)। क्या यह सिर्फ युगल में काम करना बेहतर है?

+0

मुझे लगता है कि यह पागल है कि जावा और .NET को 'डबल' से 'फ्लोट' तक एक स्पष्ट कलाकार की आवश्यकता होती है, लेकिन दूसरी तरफ नहीं, क्योंकि 'फ्लोट' के लिए संख्यात्मक मात्रा के सर्वोत्तम 'डबल' प्रतिनिधित्व की प्रत्येक कलाकार उस मात्रा का सबसे अच्छा 'फ्लोट' प्रतिनिधित्व उत्पन्न करें या इसके एक एलएसबी के भीतर है। इसके विपरीत, 'डबल' की मात्रा का सबसे अच्छा 'फ्लोट' प्रतिनिधित्व कास्टिंग अक्सर एक परिणाम उत्पन्न करता है जो कि उस मात्रा के सर्वोत्तम 'डबल' प्रतिनिधित्व के पास कहीं भी नहीं है, और परिमाण के सैकड़ों आदेशों से दूर हो सकता है (इसके प्रभावों की तुलना करें कास्टिंग ... – supercat

+0

... 3.0E + 38 * 2.0 'फ्लोट' (फ्लोट से अधिक सही ढंग से तुलना करता है। मैक्सवेल्यू), बनाम 3.0E + 38f * 2.0f को 'डबल' कास्टिंग (गलत रूप से 1.0E + 308 से अधिक की तुलना करता है)। या, एक सामान्य मामले के लिए, 'फ्लोट एफ = (फ्लोट) (1.0/10.0); 'और' डबल डी = 1.0 एफ/10.0 एफ; 'की शुद्धता की तुलना करें।' असाइनमेंट की पूर्व शैली में एक कास्ट की आवश्यकता होती है, भले ही इस तरह के सभी असाइनमेंट अनिवार्य रूप से सही होंगे। बाद की शैली को कलाकारों की आवश्यकता नहीं होती है, भले ही इस तरह के अधिकांश असाइनमेंट केवल सादे गलत हैं। – supercat

उत्तर

2

आपको युगल का उपयोग करना चाहिए। वे एकल परिशुद्धता फ्लोट से अधिक सटीक हैं और कास्टिंग के लिए एक ओवरहेड होगा।

+1

सामान्य रूप से अच्छी सलाह है, लेकिन एक्सएनए स्वयं ही 'फ्लोट' पसंद करते हैं (देखें, के लिए उदाहरण, 'MathHelper' वर्ग)। सुनिश्चित नहीं है कि क्यों, शायद इसलिए कि यदि आप संख्याओं के प्रतिलिपि बना रहे हैं और छेड़छाड़ कर रहे हैं आरएस (जैसा कि आप एक 3 डी गेम में हो सकते हैं) तो 64-बिट 'डबल' की बजाय 32-बिट 'फ्लोट' का उपयोग करने के बीच परफ अंतर महत्वपूर्ण हो सकता है। http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.mathhelper_members.aspx – LukeH

+2

@LukeH - उस स्थिति में मैं उस प्रकार के साथ जाऊंगा जिसके परिणामस्वरूप कम से कम कास्टिंग होता है। यदि आप अधिक एक्सएनए कॉल कर रहे हैं तो फ्लोट के साथ जाएं, लेकिन अन्यथा डबल के साथ जाएं। – ChrisF

2

यह पूर्णांकों, फ्लोटिंग प्वाइंट संख्या के लिए double और decimal दशमलव-सटीक संख्या के लिए के लिए int की एक डिफ़ॉल्ट विकल्प के साथ शुरू करने के लिए अच्छा है। फिर ऑप्टिमाइज़ेशन के रूप में या तो उस विकल्प में परिवर्तन करें (floatdouble से कम स्थान लेता है, इसलिए यदि आप उनमें से बहुत बड़ी संख्या में स्टोर कर रहे हैं तो उचित विकल्प हो सकता है), कुछ बाहरी लगाए गए मानदंडों से बेहतर मिलान करने के लिए, या क्योंकि यह जीता पर्याप्त नहीं है (यानी जब आपको के बजाय long का उपयोग करने की आवश्यकता है)।

1

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

यदि प्रदर्शन कोई मुद्दा नहीं है तो मैं कोड क्लीनर बनाने के लिए डबल के साथ जाऊंगा।

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