बस "अन्य भाषाओं" विकल्प के लिए कुछ जोड़ने जा रहा है।
सी: चूंकि यह सिर्फ एक अकादमिक अभ्यास है जो वास्तव में कोई फर्क नहीं पड़ता है, मैंने सोचा कि मैं कुछ अलग योगदान दूंगा।
मैंने बिना किसी अनुकूलन के विधानसभा के लिए संकलित किया और परिणाम को देखा।
कोड:
int main() {
volatile int a;
volatile int b;
asm("## 5/2\n");
a = 5;
a = a / 2;
asm("## 5*0.5");
b = 5;
b = b * 0.5;
asm("## done");
return a + b;
}
के साथ संकलित gcc tdiv.c -O1 -o tdiv.s -S
2 से विभाजन:
movl $5, -4(%ebp)
movl -4(%ebp), %eax
movl %eax, %edx
shrl $31, %edx
addl %edx, %eax
sarl %eax
movl %eax, -4(%ebp)
और 0.5 से गुणा:
movl $5, -8(%ebp)
movl -8(%ebp), %eax
pushl %eax
fildl (%esp)
leal 4(%esp), %esp
fmuls LC0
fnstcw -10(%ebp)
movzwl -10(%ebp), %eax
orw $3072, %ax
movw %ax, -12(%ebp)
fldcw -12(%ebp)
fistpl -16(%ebp)
fldcw -10(%ebp)
movl -16(%ebp), %eax
movl %eax, -8(%ebp)
हालाँकि, जब मैंने उन int
एस को बदल दिया double
(जो कि अजगर शायद करेगा), मुझे यह मिला:
विभाजन:
flds LC0
fstl -8(%ebp)
fldl -8(%ebp)
flds LC1
fmul %st, %st(1)
fxch %st(1)
fstpl -8(%ebp)
fxch %st(1)
गुणन:
fstpl -16(%ebp)
fldl -16(%ebp)
fmulp %st, %st(1)
fstpl -16(%ebp)
मैंने इस कोड में से कोई भी बेंचमार्क नहीं किया है, लेकिन सिर्फ उस कोड की जांच करके आप देख सकते हैं कि पूर्णांक का उपयोग करते हुए, 2 से विभाजन 2 से गुणा से कम है। युगल का उपयोग करना, गुणा से कम है क्योंकि कंपाइलर प्रोसेसर के फ्लोटिंग पॉइंट ऑपकोड का उपयोग करता है, जो शायद तेजी से चला (लेकिन वास्तव में मुझे नहीं पता) एक ही ऑपरेशन के लिए उनका उपयोग नहीं करने की तुलना में। तो अंततः इस जवाब से पता चला है कि 0.5 बनाम डिवीजन में 2 से गुणा का प्रदर्शन भाषा के कार्यान्वयन और उस पर चलने वाले प्लेटफ़ॉर्म पर निर्भर करता है। अंततः अंतर नगण्य है और कुछ ऐसा है जिसे आपको वास्तव में कभी भी चिंता नहीं करनी चाहिए, केवल पठनीयता के मामले में।
एक साइड नोट के रूप में, आप देख सकते हैं कि मेरे कार्यक्रम में main()
वापसी हुई है a + b
। जब मैं वाष्पशील कीवर्ड को हटा लेता हूं, तो आप कभी भी यह अनुमान नहीं लगा पाएंगे कि असेंबली कैसी दिखती है (प्रोग्राम सेटअप को छोड़कर):
## 5/2
## 5*0.5
## done
movl $5, %eax
leave
ret
इसने एक ही निर्देश में विभाजन, गुणा और जोड़ दोनों किया! स्पष्ट रूप से आपको इस बारे में चिंता करने की ज़रूरत नहीं है यदि अनुकूलक किसी भी प्रकार का सम्मानजनक है।
अत्यधिक लंबे उत्तर के लिए क्षमा करें।