tgmath.h — Mathematics and complex data type

The header tgmath.h includes the headers math.h and complex.h and defines a number of type-generic macros. This requires the compiler that is designed to support C99.

Use of the macro invokes a function whose corresponding real type and type domain are determined by the arguments for the generic parameters. If there is more than one real floating type argument, usual arithmetic conversions are applied to the real floating type arguments so that they have compatible types. Then,
  • If any argument has type _Decimal128, the type determined is _Decimal128.
  • Otherwise, if any argument has type _Decimal64, the type determined is _Decimal64.
  • Otherwise, if any argument has type _Decimal32, the type determined is _Decimal32.
  • Otherwise, if any argument has type long double, the type determined is long double.
  • Otherwise, if any argument has type double or is of integer type, the type determined is double.
  • Otherwise, if none of the above the type determined is float.
All the functions in math.h and complex.h have their corresponding type generic macros in this header where if for a function in math.h, there is a corresponding c prefixed function in complex.h, then the corresponding type generic macro has the same name as the one in math.h. The macros are:
acos acosh asin asinh atan atan2
atanh carg cbrt ceil cimag conj
copysign cos cosh cproj creal erf
erfc exp exp2 expm1 fabs fdim
floor fma fmax fmin fmod frexp
hypot ilogb ldexp lgamma llrint llround
log log10 log1p log2 logb lrint
lround nearbyint nextafter nexttoward pow remainder
remquo rint round scalbln scalbn sin
sinh sqrt tan tanh tgamma trunc
quantize() samequantum()      

[1]  The following type-generic macros are not supported for decimal-floating point types: carg(), cimag(), conj(), cproj(), creal().

Restrictions:
  • This header does not support the _FP_MODE_VARIABLE feature test macro.
  • This header is not supported for C++ applications.
For example:
  • The macro exp(int n) invokes the function exp(int n)
  • The macro acosh(float f) invokes the function acoshf(float f)
  • The macro log(float complex fc) invokes the complex function clogf(float complex fc)
  • The macro pow(double complex dc, float f) invokes cpow(double complex dc, float f)

)