在C/C++中,为什么要使用abs()
或fabs()
来查找变量的绝对值,而不使用以下代码?
int absoluteValue = value < 0 ? -value : value;
是否与较低层次的指令较少有关?
在C/C++中,为什么要使用abs()
或fabs()
来查找变量的绝对值,而不使用以下代码?
int absoluteValue = value < 0 ? -value : value;
是否与较低层次的指令较少有关?
对于浮点数,您建议的"条件abs"不等于std::abs
(或fabs
),请参见.
#include <iostream>
#include <cmath>
int main () {
double d = -0.0;
double a = d < 0 ? -d : d;
std::cout << d << ' ' << a << ' ' << std::abs(d);
}
输出:
-0 -0 0
假设-0.0
和0.0
代表相同的实数"0",这个差异可能重要,也可能不重要,这取决于结果的使用方式.然而,IEEE754指定的abs函数要求结果的符号位为0,这将禁止结果为-0.0
.我个人认为任何用来计算"绝对值"的东西都应该符合这种行为.
对于整数,这两个变量在运行时和行为上都是等效的.(Live example)
但由于std::abs
(或合适的C类似功能)被认为是正确且易于阅读的,所以你应该总是更喜欢那些.