Trong c/c++ có thư viện math.h có chứa các hàm để tính sin cos, vậy có khi nào bạn thắc mắc các hàm đó sẽ tính như thế nào không ? Vậy hôm nay chúng ta cùng đi tìm cách tính sin cos trong c++ nhé!
Cách tính sin trong c++
Sin x có thể được ước lượng dưới dạng khai triển chuỗi Taylor như sau:
Vậy nếu không cần độ chính xác quá cao thì ta có thể tính sin x với chính xác là 0.00001.
Xây dựng hàm tính sin x:
Ta có thể thấy điểm chung của các phần tử trong chuỗi trên đều có cùng một công thức
Vậy ta chỉ cần viết một hàm tính giá trị của một phần tử theo công thức trên. Sau đó dùng vòng lặp để tính tổng các phần tử đó lại, công việc cứ tiếp tục đến khi giá trị tuyệt đối một phần tử thứ n là nhỏ hơn 0.00001.
Có một vài lưu ý nhỏ sau:
- Ta không cần thiết phải tính (-1)n . Ta sẽ dùng một biến dấu là a, khi n chẵn thì a mang giá trị là 1 và ngược lại.
- Bạn không nên tính riêng tử và mẫu sau đó lấy tử chia cho mẫu. Vì có thể tử và mẫu sẽ mang giá trị rất lớn.
Code tham khảo:
#include <iostream> #include<math.h> using namespace std; float F(float x,int n) { int a; if (n % 2 == 0) a = 1; else a = -1; float temp = 1; for (int i = 1; i <= 2 * n + 1; i++) temp = temp * x / i; return a * temp; } int main() { float x, sin =0; cout << "Nhap gia tri sin can tinh(radian): "; cin >> x; int n = 0; while (abs(F(x, n)) > 0.00001) { sin += F(x, n); n++; } cout << "Gia tri can tinh: " << sin << endl; return 0; }
Nhap gia tri sin can tinh(radian): 0.5235 Gia tri can tinh: 0.499917
Ở trên mình nhập theo radian (xấp xỉ 60º) các bạn có thể chỉnh sửa để chương trình chúng ta có thể tính theo đơn vị độ.
Cách tính cos trong c++
Tương tự như sin x, cos x cũng được biểu diễn như sau:
Bây giờ bạn sẽ có hai cách để tính cos x:
- Tính theo công thức ở trên.
- Sử dụng công thức cos x = sqrt( 1 – (sin x)2 )
Ở đây mình tận dụng lại code lúc trước nên mình sẽ tính theo cách hai
#include <iostream> #include<math.h> using namespace std; float F(float x,int n) { int a; if (n % 2 == 0) a = 1; else a = -1; float temp = 1; for (int i = 1; i <= 2 * n + 1; i++) temp = temp * x / i; return a * temp; } int main() { float x, sin = 0; cout << "Nhap gia tri cos can tinh(radian): "; cin >> x; int n = 0; while (abs(F(x, n)) > 0.00001) { sin += F(x, n); n++; } cout << "Gia tri can tinh: " << sqrt(1-sin*sin) << endl; return 0; }
Nhap gia tri cos can tinh(radian): 0 Gia tri can tinh: 1
Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận