C++数学库(cmath)数学常量与数学函数
<cmath>头文件中包含了众多的数学常量与数学函数,在科学计算、工程计算、图形学等众多领域的C++程序开发中都有着广泛的应用。
1. 数学常量:
M_PI:表示圆周率 pi,其近似值为 3.14159265358979323846。
M_E:表示自然常数 e,其近似值为 2.71828182845904523536。
M_LOG2E:表示以 2 为底 e的对数,即 log2e,其近似值为 1.4426950408889634074。
M_LOG10E:表示以 10 为底 e 的对数,即 log10e,其近似值为 0.43429448190325182765。
M_SQRT2:表示根号2,其近似值为 1.41421356237309504880。
M_SQRT1_2:表示 根号2的倒数,其近似值为 0.70710678118654752440。
2. 基本三角函数:
double sin(double x):计算正弦值,x是以弧度为单位的角度。
#include <iostream> #include <cmath> int main() { double angle_rad = M_PI / 4; // 45度角转换为弧度 std::cout << "sin(pi/4) = " << std::sin(angle_rad) << std::endl; return 0; }
double cos(double x):计算余弦值,x是以弧度为单位的角度。
#include <iostream> #include <cmath> int main() { double angle_rad = M_PI / 3; // 60度角转换为弧度 std::cout << "cos(pi/3) = " << std::cos(angle_rad) << std::endl; return 0; }
double tan(double x):计算正切值,x是以弧度为单位的角度。
#include <iostream> #include <cmath> int main() { double angle_rad = M_PI / 6; // 30度角转换为弧度 std::cout << "tan(pi/6) = " << std::tan(angle_rad) << std::endl; return 0; }
3. 反三角函数:
double asin(double x):计算反正弦值,返回值是以弧度为单位的角度,x的取值范围是 [-1, 1]。
#include <iostream> #include <cmath> int main() { double x = 0.5; std::cout << "asin(0.5) = " << std::asin(x) * 180.0 / M_PI << " degrees" << std::endl; return 0; }
double acos(double x):计算反余弦值,返回值是以弧度为单位的角度,x的取值范围是 [-1, 1]。
double x = 0.5; std::cout << "acos(0.5) = " << std::acos(x) * 180.0 / M_PI << " degrees" << std::endl;
double atan(double x):计算反正切值,返回值是以弧度为单位的角度。
double x = 1.0; std::cout << "atan(1.0) = " << std::atan(x) * 180.0 / M_PI << " degrees" << std::endl;
double atan2(double y, double x):计算 y/x 的反正切值,返回值是以弧度为单位的角度。
double y = 2.0; double x = 1.0; std::cout << "atan2(2.0, 1.0) = " << std::atan2(y, x) * 180.0 / M_PI << " degrees" << std::endl;
4. 指数和对数函数:
double exp(double x):计算自然指数函数 ex 的值。
double x = 2.0; std::cout << "e^2 = " << std::exp(x) << std::endl;
double log(double x):计算自然对数(以 e 为底),x需大于 0。
double x = 10.0; std::cout << "ln(10) = " << std::log(x) << std::endl;
double log10(double x):计算常用对数(以 10 为底),x需大于 0。
double x = 100.0; std::cout << "log10(100) = " << std::log10(x) << std::endl;
5. 幂函数:
double pow(double x, double y):计算 xy 的值。
double x = 2.0; double y = 3.0; std::cout << "2^3 = " << std::pow(x, y) << std::endl;
6. 绝对值和取整函数:
int abs(int n):计算整数n的绝对值。
int num = -5; std::cout << "| - 5| = " << std::abs(num) << std::endl;
double fabs(double x):计算浮点数x的绝对值。
double num = -3.14; std::cout << "| - 3.14| = " << std::fabs(num) << std::endl;
double ceil(double x):对 x 向上取整,返回不小于x的最小整数。
double num = 3.14; std::cout << "ceil(3.14) = " << std::ceil(num) << std::endl;
double floor(double x):对 x 向下取整,返回不大于x的最大整数。
double num = 3.14; std::cout << "floor(3.14) = " << std::floor(num) << std::endl;
7. 其他函数:
double sqrt(double x):计算给非负数 x 的平方根
double num = 2.25; double result = std::sqrt(num); std::cout << "The square root of " << num << " is " << result << std::endl;
double hypot(double x, double y):计算直角三角形的斜边长度(直角坐标系中点到原点的距离),即返回 sqrt(x2 + y2) 的值。
double x = 3.0; double y = 4.0; std::cout << "Hypotenuse of a right triangle with sides 3 and 4 = " << std::hypot(x, y) << std::endl;
double cbrt(double x):计算 x 的立方根。
#include <iostream> #include <cmath> int main() { double x = 8.0; std::cout << "cbrt(8) = " << std::cbrt(x) << std::endl; return 0; }
double fmod(double numer, double denom):返回 numer / denom 的浮点余数。
double numer = 5.3; double denom = 2.0; std::cout << "fmod(5.3, 2.0) = " << std::fmod(numer, denom) << std::endl;