數學函式

常見

在 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,ba, b,計算 aba^b 的值。第一個參數是底數,第二個參數是指數,兩個參數都是浮點數(若傳入整數會被轉型成浮點數),回傳的結果也是浮點數,範例如下:

cout << pow(2, 5); // 32

sqrt() - 平方根

<cmath> 標頭檔中的 sqrt() 可以算出一個數字的平方根,也就是 x\sqrt{x},範例如下:

cout << sqrt(25); // 5

round(), floor(), ceil() - 小數進位、捨去

<cmath> 標頭檔中有三個函式可以用來處理小數的進位、捨去,這裡的三個函式 round(), floor(), ceil() 分別代表:四捨五入、無條件捨去、無條件進位,以上三個函式都是傳入浮點數(floatdoublelong 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() 傳入一個浮點數(floatdoublelong double 都行),回傳這個浮點數的絕對值,範例如下:

cout << fabs(-5.5); // 5.5

__lg() - 二進位對數

這是一個 GCC 編譯器特有的內建函式,它不屬於任何特定標頭檔。__lg() 可以算出一個數字的二進位對數,也就是 log2(x)\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

小測驗

以下哪個數學函式可以輸出 4 的平方根?