लूप में 0.1f को 0 से बदलने पर कोड 10 गुना धीमा क्यों हो जाता है (C++, VS2010)?
सभी को नमस्ते! मैं C++ में नया हूँ और कोड प्रोफाइलिंग करते समय एक बहुत अजीब समस्या का सामना किया। मेरे पास एक सरल लूप है जो वर्गों का योग निकालता है। यहाँ कोड है:
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0.1f; // पंक्ति A
sum += x * x;
}
```
यह कोड बहुत तेज़ चलता है (मेरे Visual Studio 2010 Release x64 पर लगभग 0.2 सेकंड)। लेकिन अगर मैं `0.1f` को `0` (सिर्फ शून्य) से बदल दूं:
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0; // पंक्ति B
sum += x * x;
}
```
...तो प्रदर्शन 10 गुना गिर जाता है! कोड लगभग 2 सेकंड में चलता है। मैं Visual Studio 2010 का उपयोग कर रहा हूँ, Release मोड (/O2) में कंपाइल कर रहा हूँ, SSE2 सक्षम है। ऐसा क्यों होता है? आखिरकार, शून्य से गुणा भिन्नात्मक संख्या से गुणा से भी तेज़ होना चाहिए, है ना? मैंने जाँच की — दोनों मामलों में परिणाम समान है (योग शून्य है)। मैं क्या गलत कर रहा हूँ? शायद यह कंपाइलर का बग है?
P.S. डीबगर (Debug) में कोई अंतर नहीं है — दोनों वेरिएंट समान रूप से चलते हैं।