math.h(在C99及以后的版本中,通常使用#include )是C标准库的一部分,它提供了一系列用于执行数学计算的函数。这些函数可以分为几大类:
角函数:如sin(), cos(), tan(), asin(), acos(), atan(), atan2()等。
双曲函数:如sinh(), cosh(), tanh()等。
指数和对数函数:如exp(), log(), log10(), pow()等。
绝对值、符号和最大值/最小值函数:如fabs(), abs(), fmax(), fmin()等(注意abs()是处理整数的,而fabs()是处理浮点数的)。
平方根函数:如sqrt()。
浮点数分类函数:如fpclassify(), isfinite(), isinf(), isnan(), isnormal(), signbit()等。
其他数学函数:如ceil(), floor(), round(), trunc(), modf(), frexp(), ldexp()等,用于处理浮点数的舍入、分解和组合。
示例代码
下面是一些使用math.h库中函数的简单示例。请注意,由于篇幅限制,这里不会展示所有函数的示例,但会涵盖几类常见的数学函数。
示例1:使用三角函数
#include <stdio.h>
#include <math.h>
int main() {
double angle = M_PI / 4; // 使用M_PI表示π
double sine = sin(angle);
double cosine = cos(angle);
double tangent = tan(angle);
printf("sin(%f) = %f\n", angle, sine);
printf("cos(%f) = %f\n", angle, cosine);
printf("tan(%f) = %f\n", angle, tangent);
return 0;
}
示例2:使用指数和对数函数
#include <stdio.h>
#include <math.h>
int main() {
double base = 2.0;
double exponent = 3.0;
double result = pow(base, exponent);
printf("%f raised to the power of %f is %f\n", base, exponent, result);
double logBaseE = log(result); // 自然对数
double logBase10 = log10(result); // 以10为底的对数
printf("The natural logarithm of %f is %f\n", result, logBaseE);
printf("The logarithm base 10 of %f is %f\n", result, logBase10);
return 0;
}
示例3:使用平方根和绝对值函数
#include <stdio.h>
#include <math.h>
int main() {
double number = 9.0;
double sqrtNumber = sqrt(number);
printf("The square root of %f is %f\n", number, sqrtNumber);
int intNumber = -5;
double absNumber = fabs((double)intNumber); // 注意fabs需要double类型
printf("The absolute value of %d is %f\n", intNumber, absNumber);
return 0;
}
常用的math库函数
1. 三角函数
sin(double x): 计算x(以弧度为单位)的正弦值。
cos(double x): 计算x(以弧度为单位)的余弦值。
tan(double x): 计算x(以弧度为单位)的正切值。
asin(double x): 计算x的反正弦值(结果以弧度表示)。
acos(double x): 计算x的反余弦值(结果以弧度表示)。
atan(double x): 计算x的反正切值(结果以弧度表示)。
atan2(double y, double x): 计算y/x的反正切值,考虑两个参数的符号以确定正确的象限。
示例代码:
#include <stdio.h>
#include <math.h>
int main() {
double radians = M_PI / 4; // M_PI是math.h中定义的π的值
printf("sin(%lf) = %lf\n", radians, sin(radians));
printf("cos(%lf) = %lf\n", radians, cos(radians));
printf("tan(%lf) = %lf\n", radians, tan(radians));
return 0;
}
2. 指数和对数函数
exp(double x): 计算e的x次幂(e是自然对数的底数,约等于2.71828)。
log(double x): 计算x的自然对数(以e为底)。
log10(double x): 计算x的以10为底的对数。
pow(double base, double exponent): 计算base的exponent次幂。
示例代码:
#include <stdio.h>
#include <math.h>
int main() {
double result;
result = exp(1.0); // e^1
printf("exp(1) = %f\n", result);
result = log(2.71828); // ln(e)
printf("log(e) = %f\n", result);
result = pow(2.0, 3.0); // 2^3
printf("2^3 = %f\n", result);
return 0;
}
3. 浮点数的比较
由于浮点数的表示方式,直接比较两个浮点数是否相等可能会因为精度问题而失败。math库提供了fabs(double x)函数来计算x的绝对值,以及fequale(double x, double y, double epsilon)(注意:这不是标准math库的一部分,但可以用作示例)来检查两个浮点数是否在给定的epsilon范围内相等。
示例代码(使用自定义的fequale函数):
#include <stdio.h>
#include <math.h>
int fequale(double x, double y, double epsilon) {
return fabs(x - y) < epsilon;
}
int main() {
double a = 0.1 + 0.2;
double b = 0.3;
if (fequale(a, b, 0.00001