用c++寫一sin函數的泰勒展開式

2007-10-26 10:59 pm
題目是說用sin(x)=Σ(-1)^(n+1) * x^(2n-1) / (2n-1)!

以下是我寫的程式
m代表Σ要算到幾階
x是輸入角度
c++編譯成功
但是輸入階數跟角度後
就停住 不會出現結果....
希望有高手能幫我找出其中的問題
也許對大家來說這很簡單...><

#include<iostream>
using namespace std;
int main()
{
float x,m,n,d,sin;
cout<<"輸入階數";
cin>>m;
cout<<"輸入角度";
cin>>x;
d=x*3.14159/180;
sin=0.0;
for(n=1;n<=m;n=n+1)
{
float a=1;
float b=1;
float c=1;
for(n=1;n<=n+1;n=n+1)
{
a=a*(-1);
}
for(n=1;n<=2*n-1;n=n+1)
{
b=b*d
}
for(n=1;n<=2*n-1;n=n+1)
{
c=c*(c+1)
}
sin=sin+(a*b/c);
}
cout<<"sin(x)="<<sin;
system("pause");
return 0;
}

回答 (2)

2007-10-27 6:10 am
✔ 最佳答案
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<iomanip>
#define pi acos(-1.0)
using namespace std;
unsigned int factorial(int n)
{
unsigned int value=1;
for(int i=0;i<n;i++){
value*=(i+1);
}
return value;
}
double one_shoot(int n, double x)
{
return pow(-1.0,n)*pow(x,2*n+1)/factorial(2*n+1);
}
int main(int argc, char** argv){
//=====START=====//
int n;
double x,value=0,theta;
cout<<"Sine of Taylor series"<<endl;
cout<<"Input X(degree): ",cin>>theta;
x=theta*pi/180;
cout<<"Input N: ",cin>>n;
for(int i=0;i<n;i++){
value+=one_shoot(i,x);
}
cout<<"sin("<<theta<<")="<<setprecision(15)<<value<<endl;
//=====END=====//
system("PAUSE");
return 0;
}

2007-10-26 22:11:32 補充:
你寫的公式恐怕有錯誤……
參考: 僅供參考或抄襲
2007-10-27 8:33 am
確定是
sin(x) = x - (1/3!)x3 + (1/5!)x5 - (1/7!)x7+ ...
你們對一下


收錄日期: 2021-04-28 23:07:46
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20071026000015KK04687

檢視 Wayback Machine 備份