मुझे अपने कोड के गर्म पथ में कुछ पूर्णांक डिवीजन करने की आवश्यकता है। मैंने पहले ही प्रोफाइलिंग और चक्र गिनती के माध्यम से निर्धारित किया है कि पूर्णांक डिवीजनों की लागत मुझे है। मुझे आशा है कि कुछ ऐसा है जो मैं कुछ सस्ता में विभाजन को कम करने के लिए कर सकता हूं।मैं 2^एन + 1 द्वारा विभाजन को कैसे कम कर सकता हूं?
इस पथ में, मैं 2^एन + 1 से विभाजित हूं, जहां एन परिवर्तनीय है। अनिवार्य रूप से मैं विभाजन ऑपरेटर निकालने के लिए इस समारोह को अनुकूलित करना चाहते:
unsigned long compute(unsigned long a, unsigned int n)
{
return a/((1 << n) + 1);
}
अगर मैं द्वारा 2^n विभाजित किया गया है, मैं सिर्फ एक पारी-सही n द्वारा साथ div की जगह लेंगे। अगर मैं स्थिरता से विभाजित हो रहा था, तो मैं संकलक शक्ति को उस विशिष्ट विभाजन को कम करने देता हूं, संभवतः इसे एक गुणा और कुछ बदलावों में बदल देता हूं।
क्या कोई समान अनुकूलन है जो 2^एन + 1 पर लागू होता है?
संपादित करें: यहां एक मनमाना 64-बिट पूर्णांक हो सकता है। n 10 के बीच केवल कुछ मान लेता है और कहता है, 25. मैं निश्चित रूप से प्रत्येक एन के लिए कुछ मानों का प्रीकंप्यूट कर सकता हूं, लेकिन इसके लिए नहीं।
वहाँ एक और एन के मूल्यों पर किसी भी बाधाओं? –
क्या संदर्भ है जिसमें आप फ़ंक्शन को कॉल कर रहे हैं? – GManNickG
'एक/लुकअप [एन];' –