在 C++ 內建的 STL 函式庫中有很多好用的數學函式,這些函式可以幫助我們在程式中進行數學運算,比如說:取最大值、取最小值、次方、平方根等等。接下來會介紹幾個常用的數學函式!
min() - 取最小值#
在 <algorithm> 標頭檔中有一個,min() 函式可以傳入兩個變數或是一個陣列(只要是可以比較的型態都可以),並且取出最小的那一個,範例如下:
cout << min(10, 20); // 10
cout << min({10, 20, 30}); // 10
max() - 取最大值#
一樣在 <algorithm> 標頭檔中,這個 max() 和 min() 恰好相反,可以傳入兩個變數或是一個陣列(只要是可以比較的型態都可以),並且取出最大的那一個,範例如下:
cout << max(10, 20); // 20
cout << max({10, 20, 30}); // 30
pow() - 次方#
接下來是 <cmath> 標頭檔中的 pow(),可以傳入兩個參數 \(a, b\),計算 \(a^b\) 的值。第一個參數是底數,第二個參數是指數,兩個參數都是浮點數(若傳入整數會被轉型成浮點數),回傳的結果也是浮點數,範例如下:
cout << pow(2, 5); // 32
sqrt() - 平方根#
<cmath> 標頭檔中的 sqrt() 可以算出一個數字的平方根,也就是 \(\sqrt{x}\),範例如下:
cout << sqrt(25); // 5
round(), floor(), ceil() - 小數進位、捨去#
<cmath> 標頭檔中有三個函式可以用來處理小數的進位、捨去,這裡的三個函式 round(), floor(), ceil() 分別代表:四捨五入、無條件捨去、無條件進位,以上三個函式都是傳入浮點數(float、double、long double 都行)並回傳整數。範例如下:
cout << round(3.14) << '\n'; // 3
cout << floor(3.14) << '\n'; // 3
cout << ceil(3.14) << '\n'; // 4
abs() - 絕對值#
<cmath> 標頭檔中的 abs() 傳入一個整數,回傳這個整數的絕對值,範例如下:
cout << abs(-5); // 5
fabs() - 絕對值(浮點數版本)#
<cmath> 標頭檔中的 fabs() 傳入一個浮點數(float、double、long double 都行),回傳這個浮點數的絕對值,範例如下:
cout << fabs(-5.5); // 5.5
__lg() - 二進位對數#
這是一個 GCC 編譯器特有的內建函式,它不屬於任何特定標頭檔。__lg() 可以算出一個數字的二進位對數,也就是 \(\log_2({x})\)。需要傳入一個整數,回傳的結果也是整數,範例如下:
cout << __lg(8); // 3
__gcd() - 最大公因數#
這也是一個 GCC 編譯器特有的內建函式,它不屬於任何特定標頭檔。__gcd() 可以算出兩個數字的最大公因數。需要傳入兩個整數,回傳的結果也是整數,範例如下:
cout << __gcd(10, 20); // 10
sin(), cos(), tan() - 三角函式#
<cmath> 標頭檔中的 sin(), cos(), tan() 分別代表:正弦、餘弦、正切,這三個函式都是用來計算三角函式的,傳入的參數是弧度(浮點數),回傳的結果也是浮點數,範例如下:
cout << sin(3.14); // 0
cout << cos(3.14); // -1
cout << tan(3.14); // -1.22465e-16
asin(), acos(), atan() - 反三角函式#
<cmath> 標頭檔中的 asin(), acos(), atan() 分別代表:反正弦、反餘弦、反正切,這三個函式都是用來計算反三角函式的,傳入的參數是弧度(浮點數),回傳的結果也是浮點數,範例如下:
cout << asin(0); // 0
cout << acos(0); // 1.5708
cout << atan(0); // 0
