第57章 常用数学函数
标准数学库(math.h或cmath)提供了丰富的数学计算函数,其中三角函数、对数函数和指数函数是编程中处理几何、科学计算问题的基础工具。
57.1 数学库的使用
- 头包含:
- C语言中需包含
<math.h>。 - C++中需包含
<cmath>(推荐)或<math.h>。
- C语言中需包含
- 编译链接:部分编译器(如GCC)使用数学库函数时,需在编译命令中添加-lm选项(链接数学库)。
- 数据类型:函数参数和返回值多为double类型,部分函数提供float(后缀f)和long double (后缀l)版本(如sinf、sinl),本章以double类型为主。
- 错误处理:当输入参数无效时(如对数参数为负数),函数行为由编译器实现定义,可能返回NaN(非数字)或引发域错误,编程中需保证输入合法。
57.2 三角函数
三角函数以弧度为单位接收参数,涉及角度计算时需先将角度转换为弧度,转换公式:
57.2.1 基本三角函数
-
正弦函数sin
- 函数原型:
double sin(double x); - 功能:计算(弧度)的正弦值。
- 参数:无取值范围限制,函数自动按周期处理。
- 返回值:范围。
- 示例:,。
- 函数原型:
-
余弦函数cos
- 函数原型:
double cos(double x); - 功能:计算(弧度)的余弦值。
- 参数:无取值限制,周期。
- 返回值:范围。
- 示例:,。
- 函数原型:
-
正切函数tan
- 函数原型:
double tan(double x); - 功能:计算。
- 参数:当(为整数),分母为0,返回正负无穷。
- 返回值:取值范围。
- 示例:,。
- 函数原型:
57.2.2 反三角函数
-
反正弦函数asin
- 原型:
double asin(double x); - 功能:计算。
- 参数:,超出返回NaN。
- 返回值:弧度,区间。
- 示例:,。
- 原型:
-
反余弦函数acos
- 原型:
double acos(double x); - 功能:计算。
- 参数:,超出返回NaN。
- 返回值:弧度,区间。
- 示例:,。
- 原型:
-
反正切函数atan
- 原型:
double atan(double x); - 功能:计算。
- 参数:任意实数。
- 返回值:弧度,区间。
- 示例:,。
- 原型:
57.2.3 角度与弧度转换
弧度转角度
宏定义示例:#define rad2deg(x) (x * 180.0 / M_PI)
角度转弧度
宏定义示例:#define deg2rad(x) (x * M_PI / 180.0)
常量说明:M_PI代表圆周率,部分编译器需要先定义#define _USE_MATH_DEFINES才能使用。
57.3 对数函数
57.3.1 自然对数log(以为底)
- 原型:
double log(double x); - 功能:计算,满足。
- 参数:,否则返回NaN。
- 返回值:全体实数范围。
- 示例:,。
57.3.2 常用对数log10(以10为底)
- 原型:
double log10(double x); - 功能:计算,满足。
- 参数:,否则返回NaN。
- 示例:,。
57.3.3 任意底数对数(换底公式)
约束: 示例:
57.3.4 以2为底log2(C99标准)
- 原型:
double log2(double x); - 参数:
- 示例:
57.4 指数函数
57.4.1 自然指数函数 exp(底数)
- 原型:
double exp(double x); - 功能:计算,。
- 参数:任意实数,过大时返回无穷大。
- 返回值:
- 示例:,。
57.4.2 幂函数pow
- 原型:
double pow(double x, double y); - 功能:
- 参数限制:
- 时,必须是整数;
- 且返回NaN。
- 示例:,。
57.4.3 平方根sqrt
- 原型:
double sqrt(double x); - 功能:
- 参数:,负数返回NaN。
- 示例:。
57.4.4 立方根cbrt(C99)
- 原型:
double cbrt(double x); - 功能:
- 参数:正负实数均可。
- 示例:。
57.5 函数使用注意事项
- 参数合法性
- asin、acos 参数必须在;
- log/log10/log2 参数必须大于0;
- sqrt 参数不能为负数; 非法输入会得到NaN,造成计算错误。
- 浮点数精度误差 如,判断相等需用误差区间:。
- 单位区分:三角函数输入输出全为弧度,角度必须转换。
- 常量兼容:VS等编译器需
#define _USE_MATH_DEFINES才能使用M_PI。 - 返回值范围
- sin/cos:
- asin:,acos:
- exp恒正,对数可正可负
57.6 选择题练习(含参考答案)
参考答案与解析(点击展开)
- B ——
sin(x)以弧度为参数; 弧度 = 90°,。 - B —— ,因为 ;也可由
log2(8.0)返回 3.0 验证。 - B —— 弧度 = 角度 × ,例如 180° 对应 。
- A ——
exp(x)返回 (),定义域为任意实数,返回值恒正。 - B —— 浮点数存在精度误差,应使用误差区间判断:
fabs(a-b) < 1e-9。
-
的返回值(其中 是 90° 对应的弧度)是?( )
- A. 0
- B. 1
- C. -1
- D. 0.5
-
调用
log2(8.0),返回值是?( )- A. 2
- B. 3
- C. 8
- D. 0.5
-
将角度转换为弧度的公式是?( )
- A. 弧度 = 角度 × 180 /
- B. 弧度 = 角度 × / 180
- C. 弧度 = 角度 /
- D. 弧度 = 角度 ×
-
关于
exp(x)函数,下列说法正确的是?( )- A. 返回 ()
- B. 返回以 10 为底的对数
- C. 参数必须大于 0
- D. 返回值可能为负数
-
在 C++ 中比较两个 double 是否"相等",推荐做法是?( )
- A. 直接用
a == b - B. 用
fabs(a - b) < 1e-9判断误差区间 - C. 用
a - b == 0 - D. 以上都不对
- A. 直接用