x >= start && x <= end
यदि पूर्णांक दो पूर्णांकों के बीच है, तो C या C ++ से अधिक तेज़ तरीका है ?
अद्यतन : मेरा विशिष्ट मंच iOS है। यह एक बॉक्स ब्लर फ़ंक्शन का हिस्सा है जो किसी दिए गए वर्ग में एक सर्कल में पिक्सल को प्रतिबंधित करता है।
अद्यतन : स्वीकृत उत्तर का प्रयास करने के बाद , मुझे इसे सामान्य x >= start && x <= end
तरीके से करने के लिए कोड की एक पंक्ति पर परिमाण स्पीडअप का एक आदेश मिला ।
अद्यतन : यहाँ XCode से कोडांतरक के साथ कोड के बाद और पहले है:
नया रास्ता
// diff = (end - start) + 1
#define POINT_IN_RANGE_AND_INCREMENT(p, range) ((p++ - range.start) < range.diff)
Ltmp1313:
ldr r0, [sp, #176] @ 4-byte Reload
ldr r1, [sp, #164] @ 4-byte Reload
ldr r0, [r0]
ldr r1, [r1]
sub.w r0, r9, r0
cmp r0, r1
blo LBB44_30
पुराना तरीका
#define POINT_IN_RANGE_AND_INCREMENT(p, range) (p <= range.end && p++ >= range.start)
Ltmp1301:
ldr r1, [sp, #172] @ 4-byte Reload
ldr r1, [r1]
cmp r0, r1
bls LBB44_32
mov r6, r0
b LBB44_33
LBB44_32:
ldr r1, [sp, #188] @ 4-byte Reload
adds r6, r0, #1
Ltmp1302:
ldr r1, [r1]
cmp r0, r1
bhs LBB44_36
बहुत आश्चर्यजनक है कि कैसे ब्रांचिंग को कम करना या समाप्त करना ऐसी नाटकीय गति प्रदान कर सकता है।