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 functionexp(int n)
- The macro
acosh(float f)
invokes the functionacoshf(float f)
- The macro
log(float complex fc)
invokes the complex functionclogf(float complex fc)
- The macro
pow(double complex dc, float f)
invokescpow(double complex dc, float f)
)