更改C++/iOS中默认的除以0的行为

Change default divide by 0 behavior in C++/iOS

本文关键字:默认 C++ iOS 更改      更新时间:2023-10-16

我正在构建一个iOS应用程序。

我有以下代码:

if(pbCB == 0) { //Don't divide by 0
    c = 1;
} else {
    c = sqrt(pb / pbCB) * PROTANOPIA_WBP;
}

我真的想去掉if语句(上面的代码在for循环中)。

我知道用0进行浮点除法,然后将该值强制转换为无符号字符(使用gdb进行测试):

//floating-point division by 0
p 10.0/0
$1 = inf
//casted to an unsigned char
p (unsigned char) (10.0/0)
$2 = 0 '00'

我想知道的是,是否有一种方法可以更改除以0的定义,使其返回1?一位教授告诉我,这是一个硬件/架构问题,没有办法解决,但我想看看情况是否并非如此。谢谢你的回答/想法/建议。

就像Alan Stokes提到的那样,您无法有效地更改如何处理除以零。

但是,根据您使用的值的语义和范围,可能会提升和/或缩放您的输入,这样就不会留下0了。

编辑:我所说的语义是指所讨论的相机实际产生的值的范围。许多数码相机实际上无法产生完整的RGB范围。如果没有,您可以使用这些信息将您的输入转换到所需的范围。

如果你没有这类信息,或者你的相机确实产生了(0,0,0)-(255255255),另一种选择是将你的输入提升为浮动,并根据需要以该格式移动和/或缩放。这将需要更多的计算,但它可能比失败的分支预测成本更低。在做出任何最终决定之前,一定要测量对代表性输入样本的影响。

不,你不能。它由浮点规范指定,并在硬件中实现。