有没有比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_33LBB44_32: ldr r1, [sp, #188] @ 4-byte Reload adds r6, r0, #1Ltmp1302: ldr r1, [r1] cmp r0, r1bhs LBB44_36
相当惊人的如何减少或消除分支可以提供如此戏剧性的加速。
相似问题