gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:46:45 28 4
gpt4 key购买 nike

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

我有以下代码:

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

我真的很想摆脱 if 语句(上面的代码在 for 循环中)。

我知道将 float 除以 0,然后将该值转换为 unsigned char 给出(使用 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 '\000'

我想知道是否有办法改变除以 0 的定义,使其返回 1?一位教授告诉我这是一个硬件/架构问题,没有办法解决,但我想看看是否可能不是这样。感谢您的任何回答/想法/建议。

最佳答案

正如 Alan Stokes 提到的,您无法有效地更改除以零的处理方式。

但是根据您正在使用的值的语义和范围,可能会提升和/或缩放您的输入,以便不留 0。

编辑:通过语义,我的意思是所讨论的相机实际产生的值的范围。许多数码相机实际上无法产生完整的 RGB 范围。如果不是,您可以使用该信息将您的输入转移到所需的范围内。

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

关于c++ - 在 C++/iOS 中更改默认除以 0 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com