C 编程/tgmath.h
外观
< C 编程
(重定向自 C 编程/C 参考/tgmath.h)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