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é.