C++中的常用数学函数

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double pi,e,n;
int i;
pi = acos(-1.0);
e = exp(1.0);

cout << "abs(-10) = " << abs(-10) << "/n";//求整数的绝对值
cout << "fabs(-10.8) = " << fabs(-10.8) << "/n";
cout << "asin(0.5) = " << asin(0.5) << " (π/6)/n";
cout << "atan(1.0) = " << atan(1.0) << " (π/4)/n";
cout << "atan2(1.0,√3) = " << atan2(1.0,sqrt(3.0)) << " (π/6)/n";
cout << "sin(π/2) = " << sin(pi / 2.0) << "/n";
cout << "sinh(π/2) = " << sinh(pi /2.0 ) << "/n";
cout << "cos(π/2) = " << cos(pi / 2.0) << " (≈0.0)/n";
cout << "cosh(π/2) = " << cosh(pi /2.0 ) << "/n";
cout << "tan(π/4) = " << tan(pi / 4) << "/n";
cout << "tanh(π/4) = " << tanh(pi /4 ) << "/n";
cout << "ceil(1.3) = " << ceil(1.3) << "/n";
cout << "ceil(-1.3) = " << ceil(-1.3) << "/n";
cout << "floor(1.3) = " << floor(1.3) << "/n";
cout << "floor(-1.3) = " << floor(-1.3) << "/n";
cout << "log(e*e) = " << log(e*e) << "/n";
cout << "log10(1000.0) = " << log10(1000.0) << "/n";
cout << "fmod(10.2,3.0) = " << fmod(10.2,3.0) << "/n";
cout << "fmod(-10.2,3.0) = " << fmod(-10.2,3.0) << "/n";
cout << "pow(25.0,2.0) = " << pow(25.0,2.0) << "/n";
cout << "modf(-12.3435,&n) = " << modf(-12.3435,&n) << ",";
cout << "n = " << n << "/t-12.3435 = n + modf(-12.3435,&n)/n";
cout << "frexp(17.0,&i) = " << frexp(17.0,&i) << ",";
cout << "i = " << i << "/t17.0 = frexp(17.0,&i)*2^i/n";
cout << "ldexp(0.53125,5) = " << ldexp(0.53135,5) << "/tldexp(0.53125,5)=0.53125*2^5/n";
return 0;
}
/*
输出结果:
abs(-10) = 10
fabs(-10.8) = 10.8
asin(0.5) = 0.523599 (π/6)
atan(1.0) = 0.785398 (π/4)
atan2(1.0,√3) = 0.523599 (π/6)
sin(π/2) = 1
sinh(π/2) = 2.3013
cos(π/2) = 6.12303e-017 (≈0.0)
cosh(π/2) = 2.50918
tan(π/4) = 1
tanh(π/4) = 0.655794
ceil(1.3) = 2
ceil(-1.3) = -1
floor(1.3) = 1
floor(-1.3) = -2
log(e*e) = 2
log10(1000.0) = 3
fmod(10.2,3.0) = 1.2
fmod(-10.2,3.0) = -1.2
pow(25.0,2.0) = 625
modf(-12.3435,&n) = -0.3435,n = -12 -12.3435 = n + modf(-12.3435,&n)
frexp(17.0,&i) = 0.53125,i = 5 17.0 = frexp(17.0,&i)*2^i
ldexp(0.53125,5) = 17.0032 ldexp(0.53125,5)=0.53125*2^5
*/
/*
abs; acos; asin; atan; atan2; ceil;cos; cosh; exp;
fabs; floor; fmod; frexp; ldexp; log;log10; modf; pow;
sin; sinh; sqrt;tan; tanh;
acosf; asinf; atanf; atan2f; ceilf; cosf; coshf; expf;
fabsf; floorf; fmodf; frexpf; ldexpf; logf;
log10f; modff; powf; sinf; sinhf; sqrtf; tanf; tanhf;
acosl; asinl; atanl; atan2l; ceill; cosl; coshl; expl;
fabsl; floorl; fmodl; frexpl; ldexpl; logl;
log10l; modfl; powl; sinl; sinhl; sqrtl; tanl; tanhl;
 
<think>根据用户需求,需要总结C++常用数学函数,主要参考引用[1]和引用[2]中的内容。用户之前的问题是关于C++常用代码结构,现在转向数学函数,因此需要聚焦在<cmath>库的功能上。 首先整理引用[1]的核心内容: 1. 基本数学函数:abs/fabs(绝对值)、sqrt(平方根)、pow(幂运算)、exp(指数)、log/log10(对数) 2. 取整函数:ceil(向上取整)、floor(向下取整)、round(四舍五入) 3. 三角函数:sin/cos/tan(正弦/余弦/正切)及对应的反函数asin/acos/atan 4. 其他函数:fmod(浮点余数)、modf(分解整数和小数部分)、hypot(欧几里得范数) 引用[2]补充了部分实用函数: - freopen(重定向输入输出) - 排序相关(sort/lower_bound/upper_bound/reverse/next_permutation) - 内存操作(memset/memcpy) 但用户明确要求数学函数,因此重点在<cmath>,排序和内存函数仅简略提及。 回答结构设计: 1. 基础数学运算(绝对值、幂、根、指数对数) 2. 取整函数 3. 三角函数 4. 其他实用函数(fmod/hypot等) 5. 补充说明(包括部分非<cmath>但常用的工具) 每个函数给出原型、示例和注意事项。特别注意: - 三角函数使用弧度制 - log(0)会导致定义域错误 - 比较浮点数时避免直接使用== 最后生成相关问题,延续之前格式。 </think>### C++常用数学函数详解 C++通过`<cmath>`数学库提供了丰富的数学计算函数,以下是常用函数分类及示例: --- #### 一、基础数学运算 1. **绝对值函数** ```cpp int a = abs(-10); // 整数绝对值, 结果:10(需`<cstdlib>`)[^2] double b = fabs(-3.14); // 浮点数绝对值, 结果:3.14[^1] ``` 2. **幂与开方** ```cpp double c = pow(2, 3); // 2³ = 8 double d = sqrt(16); // √16 = 4 double e = exp(1); // e¹ ≈ 2.718(自然指数)[^1] ``` 3. **对数函数** ```cpp double f = log(10); // ln(10) ≈ 2.302(自然对数) double g = log10(100); // log₁₀(100) = 2[^1] ``` --- #### 二、取整与舍入 ```cpp double x = 3.7; double h = ceil(x); // 向上取整 → 4.0 double i = floor(x); // 向下取整 → 3.0 double j = round(x); // 四舍五入 → 4.0[^1] ``` --- #### 三、三角函数(参数为弧度) ```cpp const double PI = acos(-1); // 获取π值 double k = sin(PI/6); // sin(30°) = 0.5 double l = cos(PI/3); // cos(60°) = 0.5 double m = tan(PI/4); // tan(45°) = 1.0 // 反三角函数(返回值弧度) double n = asin(0.5); // ≈ π/6 double o = acos(0.5); // ≈ π/3[^1] ``` --- #### 四、其他实用函数 1. **浮点数分解** ```cpp double num = 3.14; double int_part; double frac = modf(num, &int_part); // int_part=3.0, frac=0.14[^1] ``` 2. **浮点余数** ```cpp double p = fmod(10.5, 3.2); // 10.5 ÷ 3.2 余数 = 0.9[^1] ``` 3. **欧几里得范数** ```cpp double q = hypot(3, 4); // √(3²+4²) = 5.0(直角三角斜边)[^1] ``` --- ### 使用示例 ```cpp #include <iostream> #include <cmath> // 必须包含此头文件 int main() { double angle = 45 * M_PI / 180; // 角度转弧度 std::cout << "sin(45°) = " << sin(angle) << std::endl; std::cout << "√2 + √8 = " << sqrt(2) + sqrt(8) << std::endl; return 0; } ``` --- ### 注意事项 1. **参数范围** - `sqrt(x)`要求 $x \geq 0$ - `acos(x)`要求 $-1 \leq x \leq 1$ 2. **精度问题** 浮点数计算可能存在舍入误差,比较时建议: ```cpp if (fabs(a - b) < 1e-9) // 替代 a == b ``` 3. **常量使用** C++20 起可使用 `std::numbers::pi` 替代手动定义π值。 --- ### 补充工具函数(非`<cmath>`) ```cpp #include <algorithm> int arr[5] = {5, 2, 4, 3, 1}; sort(arr, arr+5); // 排序 → {1,2,3,4,5}[^2] #include <cstring> char s[10]; memset(s, 0, sizeof(s)); // 内存初始化为0[^2] ``` [^1]: `<cmath>`数学函数库 [^2]: 实用工具函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值