Skip to content

L7_01 数学库函数

一、三角函数

1.1 基本三角函数

cpp
#include <cmath>
#include <iostream>

using namespace std;

int main() {
    double angle = 30.0; // 角度
    double radian = angle * M_PI / 180.0; // 转换为弧度
    
    // 正弦函数
    double sin_val = sin(radian);
    cout << "sin(30°) = " << sin_val << endl;
    
    // 余弦函数
    double cos_val = cos(radian);
    cout << "cos(30°) = " << cos_val << endl;
    
    // 正切函数
    double tan_val = tan(radian);
    cout << "tan(30°) = " << tan_val << endl;
    
    return 0;
}

1.2 反三角函数

cpp
double asin_val = asin(0.5); // 反正弦,返回弧度
double acos_val = acos(0.5); // 反余弦,返回弧度
double atan_val = atan(1.0); // 反正切,返回弧度
double atan2_val = atan2(1, 1); // 反正切2,返回弧度

// 将弧度转换为角度
double degree = atan_val * 180.0 / M_PI;

1.3 双曲三角函数

cpp
double sinh_val = sinh(1.0); // 双曲正弦
double cosh_val = cosh(1.0); // 双曲余弦
double tanh_val = tanh(1.0); // 双曲正切

二、对数函数

2.1 常用对数

cpp
double log10_val = log10(100.0); // 以10为底的对数,结果为2
double log_val = log(2.71828);   // 自然对数(以e为底),结果约为1
double log2_val = log2(8.0);     // 以2为底的对数,结果为3

2.2 对数性质应用

cpp
// 换底公式:log_b(a) = ln(a) / ln(b)
double log_base_b = log(a) / log(b);

// 对数运算法则
// log(ab) = log(a) + log(b)
// log(a/b) = log(a) - log(b)
// log(a^b) = b * log(a)

三、指数函数

3.1 基本指数函数

cpp
double exp_val = exp(1.0); // e^1,结果约为2.71828
double pow_val = pow(2.0, 10.0); // 2^10,结果为1024
double sqrt_val = sqrt(16.0); // 平方根,结果为4
double cbrt_val = cbrt(8.0); // 立方根,结果为2

3.2 指数函数应用

cpp
// 计算复利
// A = P * e^(rt)
double principal = 1000.0; // 本金
double rate = 0.05; // 利率
double time = 5.0; // 时间(年)
double amount = principal * exp(rate * time);

四、其他数学函数

4.1 绝对值和符号函数

cpp
int abs_int = abs(-10); // 整数绝对值
double abs_double = fabs(-10.5); // 浮点数绝对值

double sign_val = copysign(1.0, -5.0); // 返回第一个参数的值,第二个参数的符号
int signbit_val = signbit(-3.14); // 判断符号位

4.2 取整函数

cpp
double floor_val = floor(3.7); // 向下取整,结果为3
double ceil_val = ceil(3.2); // 向上取整,结果为4
double round_val = round(3.5); // 四舍五入,结果为4
double trunc_val = trunc(3.9); // 截断小数部分,结果为3

4.3 取模和余数

cpp
double fmod_val = fmod(7.5, 3.0); // 浮点取模,结果为1.5
double remainder_val = remainder(7.5, 3.0); // 余数函数

4.4 最值函数

cpp
double max_val = max(3.5, 4.2); // 最大值
double min_val = min(3.5, 4.2); // 最小值

// C++11 及以上支持初始化列表
double max_of_many = max({1.0, 2.5, 3.7, 0.8});

五、数学常量

cpp
// 圆周率
double pi = M_PI; // 约等于3.141592653589793

// 自然对数底数
double e = M_E; // 约等于2.718281828459045

// 其他常量
double sqrt2 = M_SQRT2; // √2,约等于1.41421356237
double sqrt1_2 = M_SQRT1_2; // 1/√2,约等于0.70710678118
double ln2 = M_LN2; // ln(2),约等于0.69314718056
double ln10 = M_LN10; // ln(10),约等于2.302585093

六、随机数生成

cpp
#include <cstdlib>
#include <ctime>

int main() {
    // 设置随机种子
    srand(time(nullptr));
    
    // 生成0到RAND_MAX之间的随机整数
    int rand_int = rand();
    
    // 生成指定范围内的随机整数 [min, max]
    int min = 1;
    int max = 100;
    int range_rand = rand() % (max - min + 1) + min;
    
    // 生成0到1之间的随机浮点数
    double rand_double = static_cast<double>(rand()) / RAND_MAX;
    
    return 0;
}

百炼成钢,融会贯通