Hỏi về cách tính sin(x)

input: c > 0 (vd: c = 0.0001) và số thực x
output:
sin x = x/1! - x^3/3! + x^5/5! - …+ (-1)^n * [ x^( 2n+1 ) ] / (2n+1)!
với điều kiện: abs([ x^( 2n+1 ) ] / (2n+1)!) <= c

#include <iostream>
#include <math.h>
using namespace std;
int tinhsinx()
{
 int n,j,gt=1,a;
 double kt,x,c,sinx = 0;
 cout << "c = "; cin >> c;
 cout << "x = "; cin >> x;
 for (n=0;kt<=c;n++)
 {
  if (n==0) {gt = 1;}
  else
  {
   a=gt;
   for(j=n;j<=(2*n+1);j++)
   {
   a=a*j;
   }
  }
  kt = abs(pow(x,(2*n+1))/a);
  if (n%2==0) {sinx = sinx + (pow (x,(2*n+1))/a);}
  else {sinx = sinx - (pow (x,(2*n+1))/a);}
 }
 cout << "sin x = " << sinx << endl;
}   
int main()
{
 tinhsinx ();
 return 0;
}

trong code mình thấy sai ở phần tính giai thừa, mọi người coi còn sai chỗ nào nữa không? chỉ mình sửa lại với. cảm ơn nhiều.
mới học nên thấy còn lạ quá … :smile:

  1. Phải thu hẹp lại trong [-pi/2…pi/2] trước vì ct Maclaurin hội tụ xung quanh zero.
  2. Phần giai thừa không thể sử dụng int vì số quá lớn. Khi dùng ct Maclaurin thì nên tính các số hạng theo kiểu truy hồi.
  3. Còn có một đa thức bậc 6 chuẩn hơn đa thức này nữa.
4 Likes

e chưa hiểu cách "thu hẹp lại trong [-pi/2…pi/2] " . giải thích rõ hơn giúp e vs?

Quay nửa vòng tròn thì sin(x+pi) = -sinx = sin(-x) :slight_smile:
Vậy ta làm như sau: sin(5.3pi) = sin(5.3pi - 4pi) = sin(1.3pi) = sin(pi + 0.3pi) = sin(-0.3pi).

2 Likes

Giải hệ tìm đa thức xấp xỉ. http://www.coranac.com/2009/07/sines/

Taylor chính vì “đúng” với rất nhiều hàm nên không thể chính xác bằng những đa thức cụ thể ntn :smiley:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?