摘要:
我正在寻找最快的计算方法
(int) x / (int) y
Run Code Online (Sandbox Code Playgroud)
没有得到例外y==0.相反,我只想要一个任意的结果.
背景:
在编码图像处理算法时,我经常需要除以(累积的)α值.最简单的变体是带有整数运算的普通C代码.我的问题是,我通常得到结果像素的零误差除法alpha==0.然而,这正是结果无关紧要的像素:我不关心像素的颜色值alpha==0.
细节:
我正在寻找类似的东西:
result = (y==0)? 0 : x/y;
Run Code Online (Sandbox Code Playgroud)
要么
result = x / MAX( y, 1 );
Run Code Online (Sandbox Code Playgroud)
x和y是正整数.代码在嵌套循环中执行了很多次,所以我正在寻找一种摆脱条件分支的方法.
当y不超过字节范围时,我对解决方案感到满意
unsigned char kill_zero_table[256] = { 1, 1, 2, 3, 4, 5, 6, 7, [...] 255 };
[...]
result = x / kill_zero_table[y];
Run Code Online (Sandbox Code Playgroud)
但这显然不适用于更大的范围.
我想最后一个问题是:什么是最快的位,将hack改为0到任何其他整数值,同时保持所有其他值不变?
澄清
我不是100%确定分支太贵了.但是,使用了不同的编译器,所以我更喜欢基准测试而几乎没有优化(这确实值得怀疑).
当然,编译器很有用,但是我不能在C中表达"不关心"的结果,因此编译器永远无法使用全范围的优化.
代码应完全兼容C,主要平台是带有gcc&clang和MacOS的Linux 64位.