从abs(double)而不是int得到双重结果

时间:2016-09-28 15:23:45

标签: c++

我需要计算两个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

如果它有所不同,ab实际上是myData.m_latotherData.latitude() < / p>

2 个答案:

答案 0 :(得分:10)

为避免与无意中导入的C标准库标题发生冲突,请改用std::abs。这是C ++版本,并且已经严重超载,正如您所知道的那样。

否则使用C标准库中的fabs

答案 1 :(得分:2)

在C ++之前,floating pointsintegralsabs分别在不同的标题中定义cmathcstdlib