Có cách nào nhanh hơn x >= start && x <= endtrong C hoặc C ++ để kiểm tra xem một số nguyên nằm giữa hai số nguyên không?
CẬP NHẬT : Nền tảng cụ thể của tôi là iOS. Đây là một phần của chức năng làm mờ hộp hạn chế pixel vào một vòng tròn trong một hình vuông nhất định.
CẬP NHẬT : Sau khi thử câu trả lời được chấp nhận , tôi nhận được một lệnh tăng tốc độ lớn trên một dòng mã so với thực hiện x >= start && x <= endtheo cách thông thường .
CẬP NHẬT : Đây là mã sau và trước với trình biên dịch mã từ XCode:
CÁCH MỚI
// 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
CÁCH CŨ
#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
Khá tuyệt vời làm thế nào giảm hoặc loại bỏ phân nhánh có thể cung cấp một tốc độ đáng kể như vậy.
