C 库 - <tgmath.h>
C 库 <tgmath.h> 包含头文件 <math.h> 和 <complex.h>,并定义了各种类型的宏。此函数适用于根据参数(类型)调用实数或复数函数。
它允许计算机程序员表达适用于任何浮点类型(例如 float、long、double 和 long double)的数学运算。我们可以使用与类型相关的单一函数名,使代码更易于阅读。
语法
以下是 C 库头文件 <tgmath.h> 的语法,它提供了各种内置函数 -
pow(var1, var2) 或, fmod(var1, var2) 或, sin(var1, var2) 等。
参数
上述语法使用各种仅接受两个参数的函数来表达数学表达式。例如,计算两个数的幂、获取三角函数值等。var1 和 var2 可以属于相同或不同的数据类型。
返回类型
函数根据传递给宏的参数类型返回值。
确保 <tgmath.h> 简化代码维护,并借助泛型宏进行数学运算。
示例 1
C 库头文件 <tgmath.h> 演示了函数 fmod(),该函数接受两个不同数据类型的参数,并计算两个数相除后的余数。
#include <tgmath.h>
#include <stdio.h>
int main() {
float f = 3.0f;
double d = 3.0;
// 结果为 double 类型
double result = fmod(f, d);
printf("fmod(%f, %f) 的结果 = %f", f, d, result);
return 0;
}
以上代码产生以下结果 -
fmod(3.000000, 3.000000) 的结果 = 0.000000
示例 2
以下示例说明了 cabs() 函数的用法,该函数用于确定复数的绝对值并显示结果。
#include <tgmath.h>
#include <complex.h>
#include <stdio.h>
int main() {
float complex fc = 3.0f + 4.0f * I;
double complex dc = 3.0 + 4.0 * I;
long double complex ldc = 3.0l + 4.0l * I;
// res_fc 为浮点型
float res_fc = cabs(fc);
// res_dc 为双精度型
double res_dc = cabs(dc);
// res_ldc 为长双精度型
long double res_ldc = cabs(ldc);
printf("cabs(%f + %fi) = %f", crealf(fc), cimagf(fc), res_fc);
printf("cabs(%f + %fi) = %f", creal(dc), cimag(dc), res_dc);
printf("cabs(%Lf + %Lfi) = %Lf", creall(ldc), cimagl(ldc), res_ldc);
return 0;
}
执行上述代码后,我们得到以下结果 -
cabs(3.000000 + 4.000000i) = 5.000000 cabs(3.000000 + 4.000000i) = 5.000000 cabs(3.000000 + 4.000000i) = 5.000000
示例 3
这里,我们使用三角函数来表示数据类型的值 - float、double 和 long double。
#include <tgmath.h>
#include <stdio.h>
int main() {
float f = 3.0f;
double d = 3.0;
long double ld = 3.0l;
// result_f 为浮点型
double result_f = sin(f);
// result_d 为双精度型
double result_d = sin(d);
// result_ld 为长双精度型
double result_ld = sin(ld);
printf("The value of float [sin(%f)] = %f", f, result_f);
printf("The value of double [sin(%f)] = %f", d, result_d);
printf("The value of long [double sin(%Lf)] = %f", ld, result_ld);
return 0;
}
执行上述代码后,我们得到以下结果 -
The value of float [sin(3.000000)] = 0.141120 The value of double [sin(3.000000)] = 0.141120 The value of long [double sin(3.000000)] = 0.141120

