从abs(double)获取双倍结果而不是int

6

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

3
不知道你调用了哪个 abs 函数。提供 [mcve] 会有所帮助。 - juanchopanza
2个回答

11
为避免与无意中导入的C标准库头文件产生冲突,请使用std::abs。那是C ++版本,并且已经有很多重载了,正如您所知道的一样。
否则请使用C标准库中的fabs

谢谢,解决了。 :) 的确,我之前不知道。除了最近两周,我上一次编写 C++ 是在 1994 年。 :) - Phrogz
我建议使用“-Wconversion”进行构建,以避免类似的问题。 - Arvid
使用icc编译器编译时,我遇到了以下问题: error: no instance of overloaded function "std::max" matches the argument list argument types are: (int, double) double value = std::max(std::abs(thisPoint), lowerLimit); 对于我来说,thisPoint是一个双精度浮点数。 - Brian Wiley

2
在C++17之前,abs函数在处理浮点数整数时被定义在不同的头文件中(分别是cmathcstdlib)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接