何时使用fabsf而不是fabs?

5
我在想,在什么情况下会使用 fabs 而不是 fabsf(来自 cmath/math.h)?
或者解释一下它们之间的区别,因为它们看起来只是互相调用。
我 math.h 中的定义如下:
_Check_return_ inline float fabs(_In_ float _Xx) _NOEXCEPT

_Check_return_ __inline float __CRTDECL fabsf(_In_ float _X)

第一个使用 double,另一个使用 float。选择使用你正在使用的类型。 - NathanOliver
2
另外,请如果有人想要对一个问题进行投票扣分,至少要有点良心写下评论,说明该如何改进它。 - unknownSPY
@NathanOliver 我的 math.h 副本将其签名表示为“Check_return __inline float __CRTDECL fabsf(In float _X)”,而不是 double。 - unknownSPY
1
@NathanOliver 不一定,如果该文件被C++重用,并且声明受到__cplusplus宏条件的保护。 - eerorika
@unknownSPY 另一个问题 询问快速的fabsf实现,这可能与您的情况相关。由于这是数学库领域,我认为在头文件以下的任何差异都将取决于您的链接和架构选项。 - user968363
显示剩余8条评论
1个回答

3
何时使用fabsf而不是fabs 在C ++中,几乎没有理由使用fabsf。对于浮点类型,请改用std::abs。当您希望将整数的绝对值转换为double时,std::fabs可能有用,但这可能是相当小众的用例。
如果您正在编写C代码,则几乎同样简单:当您有一个float时,请使用fabsf,当您有一个double时,请使用fabs。对于其他带有f后缀的标准数学函数也是如此。

The definitions I have in my math.h are

_Check_return_ inline float fabs(_In_ float _Xx) _NOEXCEPT

C++标准库规定了std::fabs的多个重载版本。其中之一接受float类型参数。如果其他重载版本缺失,则您的标准库不符合标准。

C标准库规定了double fabs(double)。如果引用的声明适用于C,则您的标准库不符合标准。


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