相关疑难解决方法(0)

无论结果是什么,支持除零的最快整数除法是什么?

摘要:

我正在寻找最快的计算方法

(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位.

c c++ optimization divide-by-zero

109
推荐指数
3
解决办法
6221
查看次数

标签 统计

c ×1

c++ ×1

divide-by-zero ×1

optimization ×1