首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不管结果是什么,支持被零除的最快整数除法是什么?

不管结果是什么,支持被零除的最快整数除法是什么?
EN

Stack Overflow用户
提问于 2013-05-28 00:52:36
回答 4查看 6.5K关注 0票数 110

摘要:

我在寻找最快的计算方法

代码语言:javascript
复制
(int) x / (int) y

而不会得到y==0的异常。相反,我只想要一个任意的结果。

背景:

在编写图像处理算法的代码时,我经常需要除以(累积的) alpha值。最简单的变体是带有整数运算的纯C代码。我的问题是,对于使用alpha==0的结果像素,我通常会得到除以零的错误。然而,这正是结果无关紧要的像素:我并不关心使用alpha==0的像素的颜色值。

详情:

我正在寻找类似这样的东西:

代码语言:javascript
复制
result = (y==0)? 0 : x/y;

代码语言:javascript
复制
result = x / MAX( y, 1 );

X和y是正整数。代码在嵌套循环中执行了大量次,所以我正在寻找一种方法来摆脱条件分支。

当y不超过字节范围时,我对解决方案感到满意

代码语言:javascript
复制
unsigned char kill_zero_table[256] = { 1, 1, 2, 3, 4, 5, 6, 7, [...] 255 };
[...]
result = x / kill_zero_table[y];

但这显然不适用于更大的范围。

我猜最后的问题是:什么是最快的位旋转黑客改变0为任何其他整数值,而所有其他值保持不变?

Clarifications

我不是百分之百确定分支是否太昂贵。但是,由于使用了不同的编译器,所以我更喜欢进行少量优化的基准测试(这确实是有问题的)。

当然,当涉及到位旋转时,编译器是很棒的,但是我不能用C来表达“无关”的结果,所以编译器永远不能使用所有的优化。

代码应该是完全兼容C语言的,主要的平台是64位的Linux64位的gcc和clang和MacOS。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16777456

复制
相关文章

相似问题

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