Avatar ·

कोलाट्ज़ परिकल्पना की जाँच के लिए 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 मि