C 编程/tgmath.h
外观
< C 编程
tgmath.h 是一个 标准 C 头文件,它定义了许多类型通用的 宏,这些宏可用于各种数学运算。此头文件还包含 math.h
和 complex.h
。对于 math.h
和 complex.h
头文件中所有没有 f (float) 或 l (long double) 后缀的函数,并且其对应类型为 double (modf()
除外),都有相应的宏。[1]
类型通用宏是允许调用类型由宏中参数类型决定的函数的东西。这意味着,例如,x 被声明为 int 数据类型,但 已被以这种方式调用
tan((float)x)
那么此表达式将具有类型 float
[2]。
此外,如果类型通用宏的任何参数或参数是复数,它将调用复数函数,否则将调用实数函数。最终,调用的函数类型取决于参数的最终转换类型。[3]。
下面的流程图显示了 tgmath.h 的依赖关系图。[4]
下面列出的函数仅处理实数参数并返回实数输出。如果将复数参数传递给这些函数,则会返回 NaN 或其他特殊数字。[5]。
名称 | 描述 |
---|---|
acos |
反余弦 |
asin |
反正弦 |
atan |
单参数反正切 |
atan2 |
双参数反正切 |
ceil |
向上取整,不小于参数的最小整数 |
cos |
余弦 |
cosh |
双曲余弦 |
exp |
指数函数 |
fabs |
浮点数的绝对值 |
floor |
向下取整,不大于参数的最大整数 |
fmod |
浮点数的余数 |
frexp |
将数字分解为有效数字和 2 的幂 |
ldexp |
按指数缩放浮点数 (参见文章) |
log |
自然对数 |
log10 |
以 10 为底的对数 |
modf(x,p) |
返回 x 的小数部分,并将整数部分存储在指针 p 指向的位置 |
pow(x,y) |
将 x 提高到 y 的幂,xy |
sin |
正弦 |
sinh |
双曲正弦 |
sqrt |
平方根,返回该数字的非负平方根 |
tan |
正切 |
tanh |
双曲正切 |
isgreater |
如果 x > y,则返回 1,否则返回 0 |
isnan(x) |
如果 x 是 NaN (非数字),则返回 1 |
islessequal |
如果 x 小于或等于 y,则返回 1,否则返回 0 |
isinf(x) |
表示 x 是否为无穷大 |
signbit |
表示 x 是否为负数 (如果 x 小于 0,则返回 8,否则返回 0) |
下面定义的函数处理复数参数,但不返回复数输出。[5]。
名称 | 描述 |
---|---|
cacos |
反余弦 |
casin |
反正弦 |
catan |
单参数反正切 |
catan2 |
双参数反正切 |
cceil |
向上取整,不小于参数的最小整数 |
ccos |
余弦 |
ccosh |
双曲余弦 |
cexp |
指数函数 |
cabs |
复数浮点数的绝对值 |
cfloor |
向下取整,不大于参数的最大整数 |
cfmod |
浮点数的余数 |
cfrexp |
将数字分解为有效数字和 2 的幂 |
cldexp |
按指数缩放浮点数 (参见文章) |
clog |
自然对数 |
clog10 |
以 10 为底的对数 |
cmodf(x,p) |
返回 x 的小数部分,并将整数部分存储在指针 p 指向的位置 |
cpow(x,y) |
将 x 提高到 y 的幂,xy |
csin |
正弦 |
csinh |
双曲正弦 |
csqrt |
平方根,返回该数字的非负平方根 |
ctan |
正切 |
ctanh |
双曲正切 |
以下代码演示了 tgmath.h
中定义的 atan
函数的使用,该函数计算在正切域中定义的数字的反正切。
#include <stdio.h>
#include <tgmath.h>
int main()
{
float ang, ans;
scanf("%f", &ang);
ans = atan(ang);
printf("%0.3f\n", ans);
return 0;
}
这里定义的类似函数在计算“棘手”数字的返回值时存在显著差异。例如,使用 sqrt 计算 -25 的平方根返回 -NaN (非数字),而 csqrt 返回 0.000000。在其他函数中也可能注意到此类差异。
此头文件主要在计算数学函数时包含。由于它包含了 math.h 和 complex.h,因此解决了由于输入不一致而产生的问题。单独包含任何头文件都会导致某些输入的输出不一致。
- ↑ 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