...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The header <boost/core/cmath.hpp>
defines, in a portable way, the floating point classification and sign manipulation
functions from C++11.
namespace boost { namespace core { // fpclassify return values int const fp_zero = /*unspecified*/; int const fp_subnormal = /*unspecified*/; int const fp_normal = /*unspecified*/; int const fp_infinite = /*unspecified*/; int const fp_nan = /*unspecified*/; // Classification functions template<class T> bool isfinite( T x ); template<class T> bool isnan( T x ); template<class T> bool isinf( T x ); template<class T> bool isnormal( T x ); template<class T> int fpclassify( T x ); // Sign manipulation functions template<class T> bool signbit( T x ); template<class T> T copysign( T x, T y ); } // namespace core } // namespace boost
T
must be float
, double
, or long
double
.
true
when x
is finite
(not infinity or NaN), false
otherwise.
T
must be float
, double
, or long
double
.
true
when x
is NaN, false
otherwise.
T
must be float
, double
, or long
double
.
true
when x
is infinity,
false
otherwise.
T
must be float
, double
, or long
double
.
true
when x
is a normal
number (not zero, subnormal, infinity, or NaN), false
otherwise.
T
must be float
, double
, or long
double
.
fp_zero
when
x
is zero;
fp_subnormal
when x
is subnormal;
fp_infinite
when x
is infinity;
fp_nan
when
x
is NaN;
fp_normal
otherwise.
T
must be float
, double
, or long
double
.
true
when x
is negative,
false
otherwise.
T
must be float
, double
, or long
double
.
x
with the sign copied from y
.