This header defines macro functions that correspond to the functions in 
<math.h>, but which can take other non-
floating point types as arguments:
Every function in 
<math.h> that takes at least one 
double as argument (except 
modf) is defined in 
<tgmath.h> as a macro with the same semantics but taking 
generic parameters instead:
Each of the arguments provided for these 
generic parameters that is of an integer type is casted to a 
double; Arguments of 
floating-point types are used without transformation (directly as 
float, 
double or 
long double).
This header automatically includes 
<math.h> and 
<complex.h>: The type-generic function can also take 
complex values if the function exists in 
<complex.h> (prefixed with a 
"c" character).