tgmath.h
![]() | It has been suggested that this article be merged into C mathematical operations. (Discuss) Proposed since October 2011. |
C standard library (libc) |
---|
General topics |
Miscellaneous headers |
tgmath.h is a Standard C header that defines many type-generic macros that can be used for a variety of mathematical operations. This header also includes math.h
and complex.h
. For all of the functions in the math.h
and complex.h
headers that do not have an f (float) or l (long double) suffix, and whose corresponding type is double (with the exception of modf()
), there is a corresponding macro.[1]
Type-generic macro
A type generic macro is something which allows calling a function whose type is determined by the type of argument in the macro. This means, for example, x is declared as an int data type but tan has been called this way:
tan((float)x)
then this expression will have a type float[2].
Also, if any one of the parameters or arguments of a type-generic macro is complex, it will call a complex function, otherwise a real function will be called. The type of function that is called, ultimately depends upon the final converted type of parameter.[3].
Dependency Graph
Dependency graph for tgmath.h has been shown in the adjacent image.[4]
Functions from math.h [5]
Name | Description |
---|---|
acos |
inverse cosine |
asin |
inverse sine |
atan |
one-parameter inverse tangent |
atan2 |
two-parameter inverse tangent |
ceil |
ceiling, the smallest integer not less than parameter |
cos |
cosine |
cosh |
hyperbolic cosine |
exp |
exponential function |
fabs |
absolute value (of a floating-point number) |
floor |
floor, the largest integer not greater than parameter |
fmod |
floating-point remainder |
frexp |
break floating-point number down into mantissa and exponent |
ldexp |
scale floating-point number by exponent (see article) |
log |
natural logarithm |
log10 |
base-10 logarithm |
modf(x,p) |
returns fractional part of x and stores integral part where pointer p points to |
pow(x,y) |
raise x to the power of y, xy |
sin |
sine |
sinh |
hyperbolic sine |
sqrt |
square root, returns non-negative square-root of the number |
tan |
tangent |
tanh |
hyperbolic tangent |
Functions from complex.h
[5]
Name | Description |
---|---|
cacos |
inverse cosine |
casin |
inverse sine |
catan |
one-parameter inverse tangent |
catan2 |
two-parameter inverse tangent |
cceil |
ceiling, the smallest integer not less than parameter |
ccos |
cosine |
ccosh |
hyperbolic cosine |
cexp |
exponential function |
cfabs |
absolute value (of a floating-point number) |
cfloor |
floor, the largest integer not greater than parameter |
cfmod |
floating-point remainder |
cfrexp |
break floating-point number down into mantissa and exponent |
cldexp |
scale floating-point number by exponent (see article) |
clog |
natural logarithm |
clog10 |
base-10 logarithm |
cmodf(x,p) |
returns fractional part of x and stores integral part where pointer p points to |
cpow(x,y) |
raise x to the power of y, xy |
csin |
sine |
csinh |
hyperbolic sine |
csqrt |
square root |
ctan |
tangent |
ctanh |
hyperbolic tangent |
Usage example
The code below illustrates usage of ,atan
function defined in tgmath.h, which computes the inverse of tangent of a number defined in the domain of tangent.
#include <stdio.h>
#include <tgmath.h>
int main()
{
float ang, ans;
scanf("%f", &ang);
ans = atan(ang);
printf("%0.3f\n", ans);
return 0;
}
Notable differences
The similar functions defined here have notable difference when it comes to return value of "tricky" numbers. For example, using sqrt to compute square root of -25 returns -nan, whereas, csqrt returns 0.000000. Such differences may be noticed in other functions also.
Rationale
This header file is mainly included while calculating mathematical functions.As it includes both math.h and complex.h, the problem arising due to inconsistent input is solved. Including any of the header files, individually, involves, inconsistent outputs for some inputs.
References
- ^ http://www.opengroup.org/onlinepubs/009695399/basedefs/tgmath.h.html
- ^ http://manpages.ubuntu.com/manpages/hardy/man7/tgmath.h.7posix.html
- ^ http://www.qnx.com/developers/docs/6.4.1/dinkum_en/c99/tgmath.html
- ^ http://www-zeuthen.desy.de/apewww/APE/software/nlibc/html/tgmath_8h.html
- ^ a b http://pubs.opengroup.org/onlinepubs/009604599/basedefs/tgmath.h.html
See also
External Links
- Documentation http://clang.llvm.org/doxygen/tgmath_8h-source.html
- http://www.unix.com/man-page/OpenSolaris/3head/tgmath.h/
- http://publib.boulder.ibm.com/infocenter/zos/v1r11/index.jsp?topic=/com.ibm.zos.r11.bpxbd00/tgmathh.htm
- nlib.h http://read.pudn.com/downloads170/sourcecode/math/784268/nlib.h__.htm