Visual Studio 2010 में 0.1f को 0 से बदलने पर कोड 10 गुना धीमा क्यों हो जाता है?
सभी को नमस्कार! मैं Visual Studio 2010 में C++ में लिख रहा हूँ। मैंने फ्लोटिंग पॉइंट गणनाओं के लिए एक सरल loop लिखा, लेकिन एक अजीब व्यवहार देखा। यदि loop की condition में 0.1f है, तो कोड तेज़ चलता है। यदि इसे 0 (या कोई अन्य पूर्णांक, जैसे 1) से बदल दिया जाए, तो प्रदर्शन लगभग 10 गुना गिर जाता है। यहाँ एक उदाहरण है:
```cpp
const float x = 1.0f;
for (int i = 0; i < 100000000; ++i) {
// तेज़ विकल्प: if (x < 0.1f)
// धीमा विकल्प: if (x < 0)
}
```
मैं /O2 ऑप्टिमाइज़ेशन के साथ Release में कंपाइल कर रहा हूँ। यह अंतर क्यों है? क्या कंपाइलर कुछ गलत कर रहा है? या यह SSE/FPU की विशेषता है? मैं स्पष्टीकरण के लिए आभारी रहूंगा, क्योंकि मैं असमंजस में हूँ। पहले से धन्यवाद!
<<>>
समस्या की जड़: डीनॉर्मलाइज़्ड संख्याएँ और उनके प्रसंस्करण का जुर्माना
प्रदर्शन में अंतर इस बात से संबंधित है कि प्रोसेसर डीनॉर्मलाइज़्ड (सबनॉर्मल) संख्याओं को कैसे संभालता है। जब आप float x = 1.0f की तुलना 0 से करते हैं, तो परिणाम false होता है, और