What's the difference between abs and fabs?

后端 未结 3 1268
一向
一向 2020-12-15 04:41

I checked the difference between abs and fabs on python here

As I understand there are some difference regarding the speed and the passed t

3条回答
  •  温柔的废话
    2020-12-15 05:39

    In C++, std::abs is overloaded for both signed integer and floating point types. std::fabs only deals with floating point types (pre C++11). Note that the std:: is important, the C function ::abs that is commonly available for legacy reasons will only handle int!

    The problem with

    float f2= fabs(-9);
    

    is not that there is no conversion from int (the type of -9) to double, but that the compiler does not know which conversion to pick (int -> float, double, long double) since there is a std::fabs for each of those three. Your workaround explicitly tells the compiler to use the int -> double conversion, so the ambiguity goes away.

    C++11 solves this by adding double fabs( Integral arg ); which will return the abs of any integer type converted to double. Apparently, this overload is also available in C++98 mode with libstdc++ and libc++.

    In general, just use std::abs, it will do the right thing. (Interesting pitfall pointed out by @Shafik Yaghmour. Unsigned integer types do funny things in C++.)

提交回复
热议问题