Các hàm tính toán (Math Function) trong C++
Trong bài học hôm nay chúng ta sẽ cùng tìm hiểu các hàm toán học (Math Function) trong C++. Vậy C++ hổ trợ cho chúng ta các hàm toán học nào? Để sử dụng các hàm toán học trong C++ chúng ta cần khai báo thư viện nào? Chúng ta sẽ cùng tìm hiểu trong nội dung sau đây.

1. Hàm toán học (Math Function) trong C++
Trong C++ cung cấp một số hàm toán học cơ bản và chúng ta phải include <math.h> thì mới có thể sử dụng các hàm toán học được.
Trong C++ có hổ trợ các loại toán học sau:
- Trignometric functions
- Hyperbolic functions
- Exponential functions
- Floating point manipulation functions
- Maximum,Minimum and Difference functions
- Power functions
- Nearest integer operations
- Other functions
- Macro functions
- Comparison macro functions
- Error and gamma functions
Trong bài học hôm nay chúng ta chỉ tìm hiểu một trong số các loại trên thôi nhé.
Bài viết này được đăng tại [free tuts .net]
Trignometric functions
| Hàm | Mô tả |
| cos(x) | Dùng để tính cosin của x. Giá trị trả về trong phạm vi [-1, 1] |
| sin(x) | Dùng để tính sin của x. Giá trị trả về trong phạm vi [-1, 1] |
| tan(x) | Dùng để tính tan của x. |
| acos(x) | Dùng để tìm cosin nghịch đảo (acos(x) = cos-1x) của x. Giá trị trả về trong phạm vi (0,∏) nếu -1≤x≤1, không phải một số (nan) nếu x<-1 hoặc x>1 |
| asin(x) | Dùng để tìm sin nghịch đảo (asin(x) = sin-1x) của x. Giá trị trả về là -∏/2,∏/2 nếu -1≤x≤1, không phải là số (nan) nếu x<-1 hoặc x>1 |
| atan(x) | Dùng để tìm tan nghịch đảo (atan(x) = tan-1x) của x. Giá trị trả về trong phạm vi [-∏/2, ∏/2] |
| atan2(x,y) | Dùng để tìm tan nghịch đảo của tọa độ x và y. |
Ví dụ
Chúng ta cùng xem ví dụ đơn giản sau đây có sử dụng các hàm toán học như asin, sin, cos, tan, ...
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double goc = 60;
double d = goc*3.14/180;
cout << "cosin = " << cos(d) << endl;
cout << "sin = " << sin(d) << endl;
cout << "tan = " << tan(d) << endl;
cout << "cosin nghich dao = " << acos(d) << endl;
cout << "sin nghich dao = " << asin(d) << endl;
cout << "tan nghich dao = " << atan(d) << endl;
return 0;
} Và kết quả sau khi thực thi chương trình trên:
Hyperbolic functions
| Hàm | Mô tả |
| cosh(x) | Dùng để tính cos hyperbolic của x. |
| sinh(x) | Dùng để tính sin hyperbolic của x. |
| tanh(x) | Dùng để tính tang hyperbolic của x. |
| acosh(x) | Dùng để tìm nghịch đảo cos hyperbolic của x. |
| asinh(x) | Dùng để tìm nghịch đảo sin hyperbolic của x. |
| atanh(x) | Dùng để tìm nghịch đảo tang hyperbolic của x. |
Ví dụ
Chúng ta cùng xem xét một ví dụ đơn giản có sử dụng hyperbolic functions trong C++ như sau:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double x = 45;
double d = x*3.14/180;
cout << "cos hyperbolic = " << cosh(d) << endl;
cout << "sin hyperbolic = " << sinh(d) << endl;
cout << "tang hyperbolic = " << tanh(d) << endl;
cout << "nghịch dao cos hyperbolic = " << acosh(d) << endl;
cout << "nghich dao sin hyperbolic = " << asinh(d) << endl;
cout << "nghich dao tang hyperbolic = " << atanh(d) << endl;
return 0;
}Và kết quả sau khi thực thi chương trình trên như sau:
Nearest integer operations
| Hàm | Mô tả |
| ceil(x) | Dùng để làm tròn lên giá trị của x. |
| floor(x) | Dùng để làm tròn xuống giá trị của x. |
| round(x) | Dùng để làm tròn giá trị của x. |
| lround(x) | Dùng để làm tròn giá trị của x và chuyển thành số nguyên long. |
| llround(x) | Dùng để làm tròn giá trị của x và chuyển thành số nguyên long long. |
| fmod(n,d) | Dùng để lấy phần dư của phép chia n cho d |
| trunc(x) | Dùng để làm tròn xuống không chữ số thập phân |
| rint(x) | Dùng để làm tròn giá trị của x bằng rounding mode |
| lrint(x) | Dùng để làm trong giá trị của x bằng roungding mode và chuyển đổi thành số nguyên long. |
| llrint(x) | Dùng để làm tròn giá trị x và chuyển thành số nguyên long long |
| nearbyint(x) | Dùng để làm tròn giá trị x thành giá trị tích phân gần đó |
| remainder(n,d) | Dùng để tính phần còn lại của n/d. |
| remquo() | Dùng để tính toán phần còn lại và thương. |
Ví dụ
Chúng ta cùng xem xét một ví dụ đơn giản có sử dụng nearest integer operations trong C++ như sau:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double x = 9.8;
double y = 3;
cout << "ceil(" << x << "): " << ceil(x) << endl;
cout << "floor(" << x << "): " << floor(x) << endl;
cout << "round(" << x << "): " << round(x) << endl;
cout << "lround(" << x << "): " << lround(x) << endl;
cout << "llround(" << x << "): " << llround(x) << endl;
cout << "fmod(" << x << "," << y << "): " << fmod(x,y) << endl;
cout << "trunc(" << x << "): " << trunc(x) << endl;
cout << "rint(" << x << "): " << rint(x) << endl;
cout << "lrint(" << x << "): " << lrint(x) << endl;
cout << "llrint(" << x << "): " << llrint(x) << endl;
return 0;
}Và kết quả sau khi thực thi chương trình trên như sau:
Other functions
| Hàm | Mô tả |
| fabs(x) | Dùng để tính giá trị tuyệt đối của x. |
| abs(x) | Dùng để tính giá trị tuyệt đối của x. |
| fma(x,y,z) | Dùng để tính biểu thức x * y + z. |
Ví dụ
Chúng ta cùng xem xét một ví dụ đơn giản có sử dụng fabs, abs và fma trong C++ như sau:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double x = -5.6;
double y = 2;
double z = 3;
cout << "fabs(" << x << "): " << fabs(x) << endl;
cout << "abs(" << x << "): " << abs(x) << endl;
cout << "fma("<< x << "," << y << "," << z << "): " << fma(x,y,z) << endl;
return 0;
}Và kết quả sau khi thực thi chương trình trên như sau:
Macro functions
| Hàm | Mô tả |
| fpclassify(x) | Dùng để trả về giá trị của loại khớp với một trong các hằng số macro. |
| isfinite(x) | Dùng để kiểm tra xem x có hữu hạn hay không. |
| isinf(x) | Dùng để kiểm tra xem x là vô hạn hay không. |
| isnan(x) | Dùng để kiểm tra xem x có phải là nan hay không. |
| isnormal(x) | Dùng để kiểm tra xem x có bình thường hay không. |
| signbit(x) | Dùng để kiểm tra xem dấu của x có âm hay không. |
Ví dụ
Chúng ta cùng xem xét một ví dụ có sử dụng macro functions trong C++ như sau:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double x = 4.0/0.0;
switch(fpclassify(x))
{
case FP_INFINITE:
cout << "4.0/0.0 la FP_INFINITE" << endl;
break;
case FP_NAN:
cout << "4.0/0.0 la FP_NAN" << endl;
break;
case FP_ZERO:
cout << "4.0/0.0 la FP_ZERO" << endl;
break;
case FP_SUBNORMAL:
cout << "4.0/0.0 la FP_SUBNORMAL" << endl;
break;
case FP_NORMAL:
cout << "4.0/0.0 FP_NORMAL";
break;
default:
cout << "4.0/0.0 khong phai la so";
}
x = 5;
cout << "isfinite(" << x << "): " << isfinite(x) << endl;
cout << "isinf(" << x << "): " << isinf(x) << endl;
cout << "isnan(" << x << "): " << isnan(x) << endl;
cout << "isnormal(" << x << "): " << isnormal(x) << endl;
cout << "signbit(" << x << "): " << signbit(x) << endl;
return 0;
}Và kết quả sau khi thực thi chương trình trên như sau:
Comparison macro functions
| Hàm | Mô tả |
| isgreater(x,y) | Dùng để xác định xem x có lớn hơn y hay không. |
| isgreaterequal(x,y) | Dùng để xác định xem x có lớn hơn hoặc bằng y hay không. |
| less(x,y) | Dùng để xác định xem x có nhỏ hơn y hay không. |
| islessequal(x,y) | Dùng để xác định xem x nhỏ hơn hoặc bằng y. |
| islessgreater(x,y) | Dùng để xác định xem x nhỏ hơn hay lớn hơn y hay không. |
| isunordered(x,y) | Dùng để kiểm tra xem x có thể được so sánh một cách có ý nghĩa hay không. |
Ví dụ
Chúng ta cùng xem xét một ví dụ đơn giản có sử dụng comparison macro functions trong C++ như sau:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
float x;
float y;
x = 3;
y = 4;
cout << "isgreater(x,y): " << isgreater(x,y) << endl;
cout << "isgreaterequal(x,y): " << isgreaterequal(x,y) << endl;
cout << "isless(x,y): " << isless(x,y) << endl;
cout << "islessequal(x,y): " << islessequal(x,y) << endl;
cout << "islessgreater(x,y): " << islessgreater(x,y) << endl;
cout << "isunordered(x,y): " << isunordered(x,y) << endl;
return 0;
} Và kết quả sau khi thực thi chương trình trên như sau:
Error and gamma functions
| Hàm | Mô tả |
| erf(x) | Dùng để tính giá trị hàm lỗi của x. |
| erfc(x) | Dùng để tính giá trị hàm lỗi bổ sung của x. |
| tgamma(x) | Dùng để tính giá trị hàm gamma của x. |
| lgamma(x) | Dùng để tính toán logarit của hàm gamma của x. |
Ví dụ
Chúng ta cùng xem một ví dụ đơn giản có sử dụng error and gamma functions trong C++ như sau:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double x;
x = 1;
cout << "erf(x) = " << erf(x/0) << endl; javascript:void(0)
x = -1;
cout << "erfc(x) = " << erfc(x/0) << endl;
x = 0;
cout << "tgamma(x) = " << tgamma(x) << endl;
x = 2;
cout << "lgamma(x) = " << lgamma(x) << endl;
return 0;
}Và kết quả sau khi thực thi chương trình trên như sau:
2. Kết luận
Như vậy chúng ta đã tìm hiểu xong về các hàm tính toán (Math Functions) có sẳn trong C++. Bài này rất là dài và có rất nhiều hàm chúng ta không thể nào nhớ hết nổi.
Vì vậy trong bài này các bạn chỉ cần nhớ include<math.h> để sử dụng các hàm tính toán trong C++.
Mình sẽ kết thúc bài học này ở đây nhé. Bài tiếp theo mình sẽ tìm hiểu về thừa kế trong C++. Các bạn nhớ theo dõi nhé.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng