C++常用数学函数详解与代码示例
C++常用数学函数详解与代码示例
C++标准库<cmath>
提供了丰富的数学函数,本文将通过代码示例讲解8类核心函数的用法。
一、绝对值函数
#include <iostream>
#include <cmath> // 数学函数头文件
#include <cstdlib> // 用于整数绝对值
int main() {
// 整数绝对值
int a = -5;
std::cout << "abs(-5): " << std::abs(a) << "\n"; // 输出5
// 浮点数绝对值
double b = -3.14;
std::cout << "fabs(-3.14): " << std::fabs(b) << "\n"; // 输出3.14
// C++11通用绝对值(自动匹配类型)
std::cout << "std::abs(-2.718): " << std::abs(-2.718) << "\n"; // 输出2.718
return 0;
}
二、四舍五入函数
#include <iostream>
#include <cmath>
int main() {
double num1 = 2.3;
double num2 = 2.5;
double num3 = -2.5;
std::cout << "round(2.3): " << std::round(num1) << "\n"; // 2
std::cout << "round(2.5): " << std::round(num2) << "\n"; // 3(向远离0方向舍入)
std::cout << "round(-2.5): " << std::round(num3) << "\n"; // -3
return 0;
}
三、取整函数
#include <iostream>
#include <cmath>
int main() {
double x = 2.7;
double y = 2.3;
double z = -2.7;
// 下取整(地板函数)
std::cout << "floor(2.7): " << std::floor(x) << "\n"; // 2.0
std::cout << "floor(-2.7): " << std::floor(z) << "\n"; // -3.0
// 上取整(天花板函数)
std::cout << "ceil(2.3): " << std::ceil(y) << "\n"; // 3.0
std::cout << "ceil(-2.7): " << std::ceil(z) << "\n"; // -2.0
// 强制转换为整数
int result = static_cast<int>(std::floor(3.99)); // 得到3
return 0;
}
四、平方根函数
#include <iostream>
#include <cmath>
int main() {
double val1 = 16.0;
double val2 = -4.0;
std::cout << "sqrt(16): " << std::sqrt(val1) << "\n"; // 4.0
std::cout << "sqrt(-4): " << std::sqrt(val2) << "\n"; // 输出nan(非数字)
// 错误处理示例
if(std::isnan(std::sqrt(val2))) {
std::cout << "Invalid input for sqrt!\n";
}
return 0;
}
五、三角函数
#include <iostream>
#include <cmath>
int main() {
const double PI = 3.141592653589793;
// 计算60度的正弦值(需转换为弧度)
double angle = 60.0 * PI / 180.0;
std::cout << "sin(60°): " << std::sin(angle) << "\n"; // ≈0.866025
// 反三角函数示例
double asin_val = std::asin(0.5) * 180 / PI; // 结果转换为角度
std::cout << "arcsin(0.5): " << asin_val << "°\n"; // 30°
// 使用atan2计算方位角
std::cout << "atan2(1,1): " << std::atan2(1,1) << " radians\n"; // π/4
return 0;
}
六、对数函数
#include <iostream>
#include <cmath>
int main() {
// 自然对数(以e为底)
std::cout << "ln(e): " << std::log(M_E) << "\n"; // 1.0
// 常用对数(以10为底)
std::cout << "log10(1000): " << std::log10(1000) << "\n"; // 3.0
// 二进对数(C++11)
std::cout << "log2(256): " << std::log2(256) << "\n"; // 8.0
// 错误示例
std::cout << "log(-1): " << std::log(-1) << "\n"; // 输出nan
return 0;
}
七、指数函数
#include <iostream>
#include <cmath>
int main() {
// 自然指数函数
std::cout << "exp(1): " << std::exp(1) << "\n"; // ≈2.71828
// 幂函数
std::cout << "pow(2,3): " << std::pow(2,3) << "\n"; // 8.0
std::cout << "pow(8,1/3.0): " << std::pow(8,1/3.0) << "\n"; // 2.0
// 负数幂运算
std::cout << "pow(-2,3): " << std::pow(-2,3) << "\n"; // -8.0
std::cout << "pow(-2,2.5): " << std::pow(-2,2.5) << "\n"; // nan
return 0;
}
八、综合应用示例
#include <iostream>
#include <cmath>
// 计算二维空间两点距离
double distance(double x1, double y1, double x2, double y2) {
return std::hypot(x2-x1, y2-y1); // 更安全的计算方式
}
int main() {
// 综合计算示例
double num = 3.7;
std::cout << "综合运算:\n"
<< "原始值: " << num << "\n"
<< "绝对值: " << std::abs(num) << "\n"
<< "平方根: " << std::sqrt(num) << "\n"
<< "四舍五入: " << std::round(num) << "\n"
<< "下取整: " << std::floor(num) << "\n"
<< "上取整: " << std::ceil(num) << "\n"
<< "正弦值: " << std::sin(num) << "\n"
<< "自然对数: " << std::log(num) << "\n"
<< "e的幂次: " << std::exp(num) << "\n";
std::cout << "两点距离: " << distance(0,0,3,4) << "\n"; // 输出5.0
return 0;
}
关键注意事项
- 类型匹配:注意整数和浮点函数的区别(如
abs()
与fabs()
) - 错误处理:负数平方根返回
nan
,对数函数需要正数输入 - 单位转换:三角函数使用弧度制,需自行转换角度
- 返回值类型:大部分函数返回
double
类型 - C++版本:部分函数(如
round()
)需要C++11或更高标准
编译时建议使用以下命令:
g++ -std=c++11 -o math_demo math_demo.cpp
通过掌握这些核心数学函数,开发者可以高效实现各种数值计算需求。建议结合具体场景选择最合适的函数,并注意处理边界条件和异常输入。