首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >确定整数是否在具有已知值集的两个整数(包含)之间的最快方法?

确定整数是否在具有已知值集的两个整数(包含)之间的最快方法?

提问于 2017-12-20 14:43:32
回答 2关注 0查看 330

有没有比x >= start && x <= end在C或C ++测试一个整数是否在两个整数之间更快的方法?

更新:我的具体平台是iOS。这是一个框模糊函数的一部分,它将像素限制在给定的正方形中的一个圆圈。

更新:尝试接受的答案后,我得到了一个数量级的加速在一行代码做正常的x >= start && x <= end方式。

更新:这里是来自XCode的汇编程序之前和之后的代码:

新方法

代码语言:txt
复制
// diff = (end - start) + 1
代码语言:txt
复制
#define POINT_IN_RANGE_AND_INCREMENT(p, range) ((p++ - range.start) < range.diff)
代码语言:txt
复制
代码语言:txt
复制
Ltmp1313:
代码语言:txt
复制
 ldr    r0, [sp, #176] @ 4-byte Reload
代码语言:txt
复制
 ldr    r1, [sp, #164] @ 4-byte Reload
代码语言:txt
复制
 ldr    r0, [r0]
代码语言:txt
复制
 ldr    r1, [r1]
代码语言:txt
复制
 sub.w  r0, r9, r0
代码语言:txt
复制
 cmp    r0, r1
代码语言:txt
复制
 blo    LBB44_30

老方法

代码语言:txt
复制
代码语言:txt
复制
#define POINT_IN_RANGE_AND_INCREMENT(p, range) (p <= range.end && p++ >= range.start)
代码语言:txt
复制
代码语言:txt
复制
Ltmp1301:
代码语言:txt
复制
 ldr    r1, [sp, #172] @ 4-byte Reload
代码语言:txt
复制
 ldr    r1, [r1]
代码语言:txt
复制
 cmp    r0, r1
代码语言:txt
复制
 bls    LBB44_32
代码语言:txt
复制
 mov    r6, r0
代码语言:txt
复制
 b      LBB44_33
代码语言:txt
复制
LBB44_32:
代码语言:txt
复制
 ldr    r1, [sp, #188] @ 4-byte Reload
代码语言:txt
复制
 adds   r6, r0, #1
代码语言:txt
复制
Ltmp1302:
代码语言:txt
复制
 ldr    r1, [r1]
代码语言:txt
复制
 cmp    r0, r1

bhs LBB44_36

相当惊人的如何减少或消除分支可以提供如此戏剧性的加速。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档