यदि मेरे पास कुछ गणितीय समीकरण हैं जो इनपुट पर भरोसा करते हैं जो शून्य या गैर-शून्य (टेम्पलेट तर्क, संकलन समय पर जाना जाता है) हो सकता है, तो ऑप्टिमाइज़र समीकरणों का मूल्यांकन करेगा और अभिव्यक्तियों को अनुकूलित करेगा, जो जानता है कि 0 या 1.एक अनुकूलक संकलन-समय स्थिरांक के आधार पर गणितीय अभिव्यक्तियों को कम करेगा?
का मूल्यांकन होगाउदाहरण के लिए:
double x = y * Eval<type>::value;
अगर Eval<type>::value
0
है, x
हमेशा 0
हो जाएगा।
double x = exp(y * Eval<type>::value);
अगर Eval<type>::value
0
है, x
हमेशा 1
हो जाएगा।
क्या ऑप्टिमाइज़र इसे समझ सकता है और को 0
या 1
कोड में कहीं और बदल सकता है, या ये गणना रनटाइम पर की जाएगी?
मैं जीसीसी 4.7 उपयोग कर रहा हूँ के साथ -O3
यदि आप विधानसभा से परिचित हैं, तो आप उस के विधानसभा उत्पादन देख सकते हैं। – Mysticial
मैं शर्त लगाता हूं कि आप इसे पर्याप्त चालबाजी (SFINAE और whatnot) के साथ संकलित समय पर भी ऐसा करने के लिए मजबूर कर सकते हैं। – Lalaland
इस फ़ॉर्म के प्रश्नों को केवल एकमात्र सही उत्तर दिया जा सकता है "इसे अनुमति है, लेकिन इसकी आवश्यकता नहीं है।" इस मामले में, "कम्पाइलर" आमतौर पर फ्लोटिंग पॉइंट गणनाओं पर अधिक बीजगणितीय अनुकूलन नहीं कर सकता है जब तक कि आप 'आगे बढ़ें और * शुद्धता * स्विच की कीमत पर गति के लिए अनुकूलन न करें। " – zwol