2011-09-18 30 views
5

ठीक है, यह एक अजीब सवाल की तरह लग सकता है लेकिन यह एक दिलचस्प है। मैं आईओएस के लिए कोडिंग कर रहा हूं और कहा गया है कि मूल्यों को विभाजित करने के बजाय गुणा करना हमेशा सर्वोत्तम होता है क्योंकि यह तेज़ है।गुणा से धीमी गति से विभाजित है?

मुझे पता है कि प्रोसेसर इन दिनों शायद यह एक गैर मुद्दा बनाने लेकिन मेरी जिज्ञासा मुझे के बेहतर हो गया है और अगर कोई मेरे लिए यह पर कुछ प्रकाश डाला करने के लिए सक्षम हो सकता है मैं सोच रहा हूँ।

player.position = ccp(player.contentSize.width * 0.5, winSize.height * 0.5); 
+1

उन चीजें समान नहीं हैं, जब तक कि 'player.contentSize.width' और' winSize.height' फ़्लोटिंग-पॉइंट नंबर न हों। – icktoofay

+1

यदि 'player.contentSize.width' और' winSize.height' पूर्णांक हैं, तो बिट के लिए बिट स्थानांतरण के बारे में कैसे? –

+2

चूंकि यह कोड लगभग निश्चित रूप से प्रदर्शन-महत्वपूर्ण लूप में नहीं है, इसलिए यह निश्चित रूप से कोई फर्क नहीं पड़ता कि आप विभाजित या गुणा करते हैं या नहीं। बस स्पष्ट, संक्षिप्त और मजबूत कोड लिखने पर ध्यान केंद्रित करें और जब आपको वास्तव में आवश्यकता हो तो केवल प्रदर्शन के बारे में चिंता करें। –

उत्तर

4

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

हालांकि अधिकांश कंपाइलर (निश्चित रूप से जीसीसी) एक उदाहरण के रूप में एक स्थिर शक्ति के द्वारा एक विभाजन का अनुवाद करेंगे, एक दाएं शिफ्ट के लिए जहां यह अधिक कुशल होगा। यह आमतौर पर गुणा या विभाजन से तेज होगा।

7

हाँ, विभाजन आमतौर पर ज्यादा गुणा से धीमी है:

player.position = ccp(player.contentSize.width/2, winSize.height/2); 

की तुलना में धीमी:
है -

अतः ..... मेरा प्रश्न यह है।

हालांकि, जब शाब्दिक (या कुछ भी जिसे संकलन-समय पर स्थिर होने के लिए निर्धारित किया जा सकता है) द्वारा विभाजित करते समय, संकलक आमतौर पर विभाजन को अनुकूलित करेगा।

+1

"इस तरह के शाब्दिक" से, उसका मतलब 2 की शक्तियां है। फिर यह सिर्फ स्थानांतरित हो रहा है। – UncleO

+1

संकलक 3, 5, और अन्य छोटी संख्याओं से विभाजन को अनुकूलित भी कर सकता है। यदि फ़्लोटिंग-पॉइंट मोड को आराम दिया जाता है, तो एफपी डिवीजन को पारस्परिक द्वारा गुणा के साथ प्रतिस्थापित किया जाएगा। – Mysticial

0

समानांतर में एक निश्चित डिग्री तक गुणा किया जा सकता है, यदि आप या तो गुणा का उपयोग कर सकते हैं।

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