參考鏈接: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;
}