कोलाट्ज़ परिकल्पना की जाँच के लिए C++ कोड हाथ से लिखे गए असेंबली से तेज़ क्यों चलता है?
मैं C++ और x86 असेंबली सीख रहा हूँ, और कोलाट्ज़ परिकल्पना (3n+1) की जाँच के लिए एक प्रोग्राम लिखने का फैसला किया। विचार सरल है: एक संख्या लें, यदि वह सम है — 2 से भाग दें, यदि विषम है — 3 से गुणा करके 1 जोड़ें। 1 तक पहुँचने में कितने कदम लगते हैं, यह गिनना है।
पहले मैंने C++ में कोड लिखा:
```cpp
int collatz(int n) {
int steps = 0;
while (n != 1) {
if (n % 2 == 0)
n /= 2;
else
n = 3 * n + 1;
steps++;
}
return steps;
}
```
फिर मैंने हाथ से असेंबली वर्ज़न लिखा, x86-64 इंस्ट्रक्शन का उपयोग करते हुए, यह सोचते हुए कि यह तेज़ होगा:
```asm
collatz_asm:
xor eax, eax ; steps = 0
.loop:
cmp edi, 1
je .done
test edi, 1
jnz .odd
shr edi, 1 ; सम: n /= 2
inc eax
jmp .loop
.odd:
lea edi, [edi*2+edi+1] ; n = 3*n + 1
inc eax
jmp .loop
.done:
ret
```
लेकिन जब मैंने बड़ी संख्याओं पर प्रदर्शन मापा (उदाहरण के लिए, 1 से 10 मि