我需要计算两个double
值之差的绝对值,并得到double
个结果。相反,我得到了int
。
#include <typeinfo>
// ...
printf(
"a:%s b:%s delta:%s abs:%s\n",
typeid(a).name(),
typeid(b).name(),
typeid(a - b).name(),
typeid(abs(a - b)).name()
);
// Prints: a:d b:d delta:d abs:i
如果减法的结果已经加倍,为什么abs
没有使用double abs (double x);
签名?实际上,它怎么可以返回一个整数呢?最重要的是,如何强制它返回double
?
如果它有所不同,a
和b
实际上是myData.m_lat
和otherData.latitude()
。 < / p>
答案 0 :(得分:10)
为避免与无意中导入的C标准库标题发生冲突,请改用std::abs
。这是C ++版本,并且已经严重超载,正如您所知道的那样。
否则使用C标准库中的fabs
。
答案 1 :(得分:2)
在C ++之前,floating points和integrals的abs
分别在不同的标题中定义cmath
和cstdlib
。