📌 数学库函数
所属等级:GESP 7级 | 难度: | 关键词:数学库函数
📝 考纲要求
- 掌握数学库常用函数,使用前应
#include <cmath>; - 三角函数:
sin(x)、cos(x)等,参数 x 为弧度; - 对数函数:
log10(x)返回以 10 为底的对数,log2(x)返回以 2 为底的对数,log(x)即 ln(x) 自然对数; - 指数函数:
exp(x)返回 x 的以 e 为底的指数函数(即 eˣ)。
📖 通俗讲解
💡 一句话理解
<cmath> 是 C++ 的数学工具箱,把“三角函数、对数、指数、开方、绝对值、乘方”这些手算麻烦的函数都封装好了,调用一句就能拿到高精度的 double 结果。
数学库里所有函数的参数和返回值都是浮点数(double)。最重要的一点:三角函数 sin / cos / tan 接受的不是“角度”,而是“弧度”。日常我们习惯用 30°、90° 这种角度,但 C++ 里要先把角度换算成弧度,公式是 弧度 = 角度 × π / 180,否则算出来的结果会完全错误。
下面两张速查表帮你记住常用函数,以及“角度”和“弧度”的区别。
🖼️ 图解
cmath 常用函数速查表(参数/返回值均为 double)
┌──────────┬─────────────────────────────┬─────────────────────────┐
│ 函数 │ 含义 │ 参数说明 │
├──────────┼─────────────────────────────┼─────────────────────────┤
│ sin(x) │ 正弦 sin(x) │ x = 弧度(非角度!) │
│ cos(x) │ 余弦 cos(x) │ x = 弧度 │
│ tan(x) │ 正切 tan(x) │ x = 弧度 │
│ log10(x) │ 以 10 为底的对数 log₁₀(x) │ x > 0 │
│ log2(x) │ 以 2 为底的对数 log₂(x) │ x > 0 │
│ log(x) │ 自然对数 ln(x)(以 e 为底) │ x > 0 │
│ exp(x) │ 以 e 为底的指数 eˣ │ 任意实数 x │
│ sqrt(x) │ 平方根 √x │ x ≥ 0 │
│ fabs(x) │ 绝对值 |x|(浮点版) │ 任意实数 x │
│ pow(a,b) │ a 的 b 次方 aᵇ │ a≥0 或 b 为整数 │
└──────────┴─────────────────────────────┴─────────────────────────┘🖼️ 图解
单位说明:角度(°) vs 弧度(rad)
┌──────────────────────────────────────────────────────────┐
│ 角度 30° → 弧度 = 30 × π / 180 = π/6 ≈ 0.5236 rad │
│ 角度 90° → 弧度 = 90 × π / 180 = π/2 ≈ 1.5708 rad │
│ 角度180° → 弧度 = 180 × π / 180 = π ≈ 3.1416 rad │
└──────────────────────────────────────────────────────────┘
y
↑
│ /| 斜边(长1)
│ / | 角度 θ (用弧度表示!)
│ / θ | 对边 = sin(θ)
│/_____|→ x 邻边 = cos(θ)
邻边
⚠️ 错误:sin(30) ← 30 被当成 30 弧度,结果≈-0.988(错!)
✅ 正确:sin(30 * M_PI / 180) ← 先转弧度,结果=0.5(对!)🔵 核心必背重点
✅ 必背
- 头文件:用任何数学函数前先写
#include <cmath>; - 弧度换算:
弧度 = 角度 × M_PI / 180,M_PI 是 π 的常量(定义在 <cmath> 中); - 对数区分:
log10(x)是 log₁₀,log2(x)是 log₂,log(x)是 ln(自然对数,不是 10 为底); - 类型用 double:参数和接收变量都用
double,避免整数相除丢失精度。
🔑
记忆口诀:“三角吃弧度,角度先乘 π 除 180;log10 看 10、log2 看 2、log 是 ln;指数找 exp、开方用 sqrt、绝对值 fabs、乘方 pow 管。”
🔴 考试拉分难点
⚠️ 难点
- 弧度混淆:直接把角度当参数传进 sin/cos,是最典型丢分点;务必先
× π / 180。 - log 不是 log10:题目若要求“以 10 为底”,必须用
log10,用log会变成自然对数导致答案错。 - abs vs fabs:整数用
abs(<cstdlib>),浮点数必须用fabs(<cmath>),混用可能编译告警。
🟡 高频易错陷阱
🚫 扣分坑点
- 忘记
#include <cmath>,导致 sin/cos/log 等函数找不到; - 用
3.14159手写 π 而不用M_PI,精度不足还可能拼错; - 把
pow的底数/指数写成整数后直接赋给 int,精度与类型不匹配。
🧪 例题演练
例题 1(基础题):已知角度求直角三角形边长
题目:输入一个锐角角度 deg(0 < deg < 90)与斜边长度 h,求对边与邻边长度。
提示:对边 = h × sin(角度),邻边 = h × cos(角度)。注意 sin/cos 接受的是弧度。
C++
#include <iostream>
#include <cmath> // 数学库头文件
using namespace std;
int main() {
double deg, h;
cin >> deg >> h;
// 角度转弧度:乘以 π 再除以 180
double rad = deg * M_PI / 180;
double opposite = h * sin(rad); // 对边 = h * sin(角度)
double adjacent = h * cos(rad); // 邻边 = h * cos(角度)
cout << opposite << " " << adjacent << endl;
return 0;
}
输入 / 输出30 2
1 1.73205
💡 解析
30° 转弧度为 π/6 ≈ 0.5236,sin(π/6)=0.5、cos(π/6)≈0.8660,故对边=2×0.5=1,邻边=2×0.8660≈1.732。若直接写
sin(30) 会得到一个错误结果,务必先转弧度。
例题 2(模拟真题):对数与指数科学计算
题目:输入一个正数 x,依次计算并输出:① 以 10 为底的对数;② 以 2 为底的对数;③ 以 e 为底的指数 eˣ。结果均用 double 输出。
C++
#include <iostream>
#include <cmath> // 数学库头文件
using namespace std;
int main() {
double x;
cin >> x;
double a = log10(x); // 以 10 为底:log₁₀(x)
double b = log2(x); // 以 2 为底:log₂(x)
double c = exp(x); // 以 e 为底的指数:eˣ
cout << a << " " << b << " " << c << endl;
return 0;
}
输入 / 输出10
1 3.32193 22026.5
🚫 错误示范
double a = log(x); // 这算的是 ln(x) 自然对数,不是 log₁₀! 题目要求以 10 为底时应写 log10(x)。
🛡️ 避坑总结
- 用前必写
#include <cmath>; - 三角函数吃“弧度”,角度要先
× M_PI / 180; - log10 看 10、log2 看 2、log 是 ln,别混;
- exp(x) 算 eˣ,sqrt/fabs/pow 处理开方、绝对值、乘方;
- 参数与变量统一用
double,保证精度与类型正确。
💡 提示:按 ← → 方向键可在上一 / 下一知识点间快速翻页