在 C/C++ 中,为什么要使用 abs()
或 fabs()
来查找变量的绝对值而不使用以下代码?
int absoluteValue = value < 0 ? -value : value;
它与较低级别的指令较少有关吗?
原文由 Subhranil 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 C/C++ 中,为什么要使用 abs()
或 fabs()
来查找变量的绝对值而不使用以下代码?
int absoluteValue = value < 0 ? -value : value;
它与较低级别的指令较少有关吗?
原文由 Subhranil 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
对于浮点数,您建议的“条件绝对值”不等于
std::abs
(或fabs
),参见例如输出:
给定
-0.0
和0.0
代表相同的实数“0”,这种差异可能会或可能无关紧要,具体取决于结果的使用方式。但是,IEEE754 指定的 abs 函数要求结果的符号位为 0,这将禁止结果-0.0
。我个人认为任何用于计算某些“绝对值”的东西都应该符合这种行为。对于整数,两种变体在运行时和行为上都是等效的。 ( 现场示例)
但是由于
std::abs
(或合适的 C 等效项)已知是正确且易于阅读的,因此您应该始终更喜欢那些。