参考链接:C++中数学函数的使用方法_cpp里指数函数-CSDN博客
头文件 <cmath>
1. 基本的算数运算函数
1.1 sqrt()
- 计算平方根
- 功能:计算一个非负实数的平方根。
- 原型:
double sqrt(double x);
- 示例代码:
#include <iostream>
#include <cmath>int main() {double num = 25.0;double result = std::sqrt(num);std::cout << "The square root of " << num << " is " << result << std::endl;return 0;
}
1.2 pow()
- 计算幂次方
- 功能:计算
x
的y
次幂。 - 原型:
double pow(double x, double y);
- 示例代码:
#include <iostream>
#include <cmath>int main() {double base = 2.0;double exponent = 3.0;double result = std::pow(base, exponent);std::cout << base << " raised to the power of " << exponent << " is " << result << std::endl;return 0;
}
2. 三角函数
要注意角度的单位是弧度。
若需要将角度从度转换为弧度,可以使用公式
radians = degrees * (M_PI / 180)
(在某些编译器中,
M_PI
可能未定义,可以手动定义#define M_PI 3.14159265358979323846
)。
2.1 sin()
、cos()
、tan()
- 计算正弦、余弦和正切值
- 功能:分别计算给定角度(以弧度为单位)的正弦、余弦和正切值。
- 原型:
double sin(double x); 对/斜
double cos(double x); 邻/斜
double tan(double x); 对/邻
- 示例代码:
#include <iostream>
#include <cmath>int main() {double angleInRadians = 1.0; // 1 弧度double sinValue = std::sin(angleInRadians);double cosValue = std::cos(angleInRadians);double tanValue = std::tan(angleInRadians);std::cout << "sin(" << angleInRadians << ") = " << sinValue << std::endl;std::cout << "cos(" << angleInRadians << ") = " << cosValue << std::endl;std::cout << "tan(" << angleInRadians << ") = " << tanValue << std::endl;return 0;
}
2.2 asin()
、acos()
、atan()
- 计算反正弦、反余弦和反正切值
- 功能:分别计算给定值的反正弦、反余弦和反正切值,返回值为弧度。
- 原型:
double asin(double x);
double acos(double x);
double atan(double x);
- 示例代码:
#include <iostream>
#include <cmath>int main() {double value = 0.5;double asinValue = std::asin(value);double acosValue = std::acos(value);double atanValue = std::atan(value);std::cout << "arcsin(" << value << ") = " << asinValue << " radians" << std::endl;std::cout << "arccos(" << value << ") = " << acosValue << " radians" << std::endl;std::cout << "arctan(" << value << ") = " << atanValue << " radians" << std::endl;return 0;
}
2.3 atan2(y, x)
- 计算反正切值
功能:返回值为弧度,计算点(0,0)和(x,y)的连线与X轴正半轴的夹角,其值域为 [-π,π] (当y=0时,可以取到±π),且在第一二象限为正,在第三四象限为负。
与之类似的函数还有atan2f(y, x)、atan2d(y, x),分别对应float类型和int类型。
示例代码:
#include <iostream>
#define M_PI 3.14159265358979323846 // piusing namespace std;int main()
{double x = 100;double y = 1;double abs1, abs2, abs3, abs4;abs1 = atan2(y, x) * 180 / M_PI;cout << "第一象限角abs1= " << abs1 << endl;abs2 = atan2(y, -x) * 180 / M_PI;cout << "第二象限角abs2= " << abs2 << endl;abs3 = atan2(-y, -x) * 180 / M_PI;cout << "第三象限角abs3= " << abs3 << endl;abs4 = atan2(-y, x) * 180 / M_PI;cout << "第四象限角abs4= " << abs4 << endl;return 0;
}
输出结果:
第一象限角abs1= 0.572939
第二象限角abs2= 179.427
第三象限角abs3= -179.427
第四象限角abs4= -0.572939
拓展:atan2与atan的区别
1. atan(x)
atan(x)表示求的是x的反正切,其返回值为[-pi/2,+pi/2]之间的一个数。
2. atan2(y,x)
atan2(y,x)表示求的是y/x的反正切,其返回值为[-pi,pi]之间的一个数。
要注意的是,函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。
3. atan(y/x)与atan2(y,x)的区别
atan2(y, x)是4象限反正切,它的取值不仅取决于正切值y/x,还取决于点 (x, y) 落入哪个象限:
当点(x, y) 落入第一象限时,atan2(y, x)的范围是 0 ~ pi/2;
当点(x, y) 落入第二象限时,atan2(y, x)的范围是 pi/2 ~ pi;
当点(x, y) 落入第三象限时,atan2(y, x)的范围是 -pi~-pi/2;
当点(x, y) 落入第四象限时,atan2(y, x)的范围是 -pi/2~0.
而 atan(y/x) 仅仅根据正切值为y/x求出对应的角度 (可以看作仅仅是2象限反正切):
当 y/x > 0 时,atan(y/x)取值范围是 0 ~ pi/2;
当 y/x < 0 时,atan(y/x)取值范围是 -pi/2~0.
故 atan2(y, x) = atan(y/x) 仅仅发生在点 (x, y) 落入第一象限 (x>0, y>0)或第四象限(x>0, y<0)。
举个栗子:
- 栗1:假设y =1.0, x = -1.0,
则 atan(y/x) = atan(-1.0) = -pi/4, 而 atan2(y, x) = 3*pi/4。
- 栗2:斜率是1的直线的夹角
cout<<atan(1.0)*180/PI;//45°
cout<<atan2(1.0,1.0)*180/PI; //45° 第一象限
cout<<atan2(-1.0,-1.0)*180/PI; //-135°第三象限
后两个斜率都是1 但是atan只能求出一个45°
3. 对数和指数函数
3.1 exp()
- 计算自然指数
- 功能:计算
e
的x
次幂,其中e
是自然常数(约为 2.71828)。 - 原型:
double exp(double x);
- 示例代码:
#include <iostream>
#include <cmath>int main() {double x = 2.0;double result = std::exp(x);std::cout << "e raised to the power of " << x << " is " << result << std::endl;return 0;
}
3.2 log()
和 log10()
- 计算自然对数和以 10 为底的对数
- 功能:
log()
计算自然对数(以e
为底),log10()
计算以 10 为底的对数。 - 原型:
double log(double x);
double log10(double x);
- 示例代码:
#include <iostream>
#include <cmath>int main() {double num = 100.0;double naturalLog = std::log(num);double commonLog = std::log10(num);std::cout << "Natural logarithm of " << num << " is " << naturalLog << std::endl;std::cout << "Common logarithm of " << num << " is " << commonLog << std::endl;return 0;
}
4. 取整和绝对值函数
4.1 abs()
、fabs()
- 计算绝对值
- 功能:
abs()
用于计算整数的绝对值,fabs()
用于计算浮点数的绝对值。 - 原型:
int abs(int x);
double fabs(double x);
- 示例代码:
#include <iostream>
#include <cmath>int main() {int intNum = -5;double doubleNum = -3.14;int intAbs = std::abs(intNum);double doubleAbs = std::fabs(doubleNum);std::cout << "Absolute value of " << intNum << " is " << intAbs << std::endl;std::cout << "Absolute value of " << doubleNum << " is " << doubleAbs << std::endl;return 0;
}
4.2 ceil()
和 floor()
- 向上取整和向下取整
- 功能:
ceil()
将一个浮点数向上取整为不小于该数的最小整数,floor()
将一个浮点数向下取整为不大于该数的最大整数。 - 原型:
double ceil(double x);
double floor(double x);
- 示例代码:
#include <iostream>
#include <cmath>int main() {double num = 3.2;double ceiling = std::ceil(num);double floorValue = std::floor(num);std::cout << "Ceiling of " << num << " is " << ceiling << std::endl;std::cout << "Floor of " << num << " is " << floorValue << std::endl;return 0;
}