tgmath.h
(重定向自Ctgmath)
tgmath.h
是C标准函数库中的头文件,提供了数学函数的类型通用的宏定义。使用这些宏调用数学函数时,会根据参数自动对应到类型适合的数学函数,其效果类似于C++的函数重载,使得编程者不必繁琐地去调用数学库函数的单精度、双精度、长双精度、单精度复数、双精度复数、长双精度复数等各个版本。
宏定义
编辑math.h与complex.h共有
编辑一些常见数学函数既在math.h
有实数版本,也在complex.h
有复数版本。tgmath.h
提供了下述类型通用的宏定义:
- acos
- asin
- atan
- acosh
- asinh
- atanh
- cos
- sin
- tan
- cosh
- sinh
- tanh
- exp
- log
- pow
- sqrt
- fabs
math.h专用
编辑对于包含在math.h
中,但在complex.h
中没有对应的函数,提供了下述通用类型的宏:
- atan2
- cbrt
- ceil
- copysign
- erf
- erfc
- exp2
- expm1
- fdim
- floor
- fma
- fmax
- fmin
- fmod
- frexp
- hypot
- ilogb
- ldexp
- lgamma
- llrint
- llround
- log10
- log1p
- log2
- logb
- lrint
- lround
- nearbyint
- nextafter
- nexttoward
- remainder
- remquo
- rint
- round
- scalbn
- scalbln
- tgamma
- trunc
complex.h专用
编辑对于包含在complex.h
中,但在math.h
中没有对应的函数,提供了下述通用类型的宏:
- carg
- cimag
- conj
- cproj
- creal
例子
编辑#include <tgmath.h>
int n;
float f;
double d;
long double ld;
float complex fc;
double complex dc;
long double complex ldc;
//实际调用了:
exp(n); //exp(n)
acosh(f); // acoshf(f)
sin(d); // sin(d)
atan(ld); // atanl(ld)
log(fc); // clogf(fc)
sqrt(dc); // csqrt(dc)
pow(ldc, f); // cpowl(ldc, f)
remainder(n, n); // remainder(n, n)
nextafter(d, f); // nextafter(d, f)
nexttoward(f, ld); // nexttowardf(f, ld)
copysign(n, ld); // copysignl(n, ld)
ceil(fc); // 未定义
rint(dc); // 未定义
fmax(ldc, ld); // 未定义
carg(n); // carg(n)
cproj(f); // cprojf(f)
creal(d); // creal(d)
cimag(ld); // cimagl(ld)
cabs(fc); // cabsf(fc)
carg(dc); // carg(dc)
cproj(ldc); // cprojl(ldc)