1.需要包含頭文件#includemath.h
創(chuàng)新互聯(lián)成立十載來,這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計、國際域名空間、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。網(wǎng)站是否美觀、功能強大、用戶體驗好、性價比高、打開快等等,這些對于網(wǎng)站建設(shè)都非常重要,創(chuàng)新互聯(lián)通過對建站技術(shù)性的掌握、對創(chuàng)意設(shè)計的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。
2.使用角度計算時需要先轉(zhuǎn)換為弧度值
3.pi,獲取pi的值,這里用到了acos,反余弦函數(shù),值域是0-pi,取值范圍是-1到1
Ps:反余弦沒學(xué)過,百度上搜的
#include stdio.h
#include math.h
double toAngle(int);
//測試值
int angle = 30;
int main()
{
double p = sin (? toAngle( angle) );
printf(" sin : %d = %f" , angle ,p);
}
//將角度轉(zhuǎn)為弧度
double toAngle(int angle)
{
//求pi,3.141593
double pi = acos(-1);
printf(" get pi : %f\n",pi);
return angle* pi/180;
}
計算反正切函數(shù)(使用歐拉變換公式,精度很高),反正切函數(shù)的級數(shù)展開公式:
f(x) = x - x^3/3 + x^5/5 +...+ (-1)^k * x^(2k+1)/(2k + 1)+...
當(dāng)|x| 1時,級數(shù)絕對值發(fā)散,無法直接使用歐拉公式計算。因此可以通過下面的公式
進行等價轉(zhuǎn)換之后再進行計算。
等價轉(zhuǎn)換公式:
a) ATan(1/x) = Pi/2 - ATan(x)
b) ATan(-x) = - ATan(x)
特殊情況
0 = ArcTan(0)
Pi/2 = ArcTan(無窮大)
//
// 歐拉公式
//
// sum是和,term是通項值,jterm初始為1,以后按1遞增。wrksp是工作單元,視jterm的
// 最大值而定。
//
void eulsum(int nterm,double *sum,double term,int jterm,double wrksp[])
{
double tmp,dum;
if(jterm == 1)
{
nterm = 1;
wrksp[1] = term;
*sum = 0.5 * term;
}
else
{
tmp = wrksp[1];
wrksp[1] = term;
for(int j=1; j = nterm; j++)
{
dum = wrksp[j+1];
wrksp[j+1] = 0.5 * (wrksp[j] + tmp);
tmp = dum;
}
if(fabs(wrksp[nterm + 1]) = fabs(wrksp[nterm]))
{
*sum = *sum + 0.5 * wrksp[nterm + 1];
nterm = nterm + 1;
}
else
{
*sum = *sum + wrksp[nterm + 1];
}
}
}
級數(shù)計算就不用我給代碼了吧。
在math.h這個函數(shù)庫里面有cos(double x)這個函數(shù),返回x的余弦值!
唉,程序?qū)懙孟喈?dāng)不規(guī)范,看著好頭疼;函數(shù)應(yīng)該放在main外面……
#includestdio.h
#includemath.h
double jiecheng(int n)
{
int i;
double sum=1;
for(i=1;i=n;i++)
{
sum=sum*i;
}
return sum;
}
double fang(int x,int n)
{
double sum;
sum=pow(x,n);
return sum;
}
int main(void)
{
int j=1;
double x,e,count=0;
printf("e: ");
scanf("%lf",e);
printf("x: ");
scanf("%lf",x);
do{
count=count+(pow(-1,j-1))*fang(x,2*(j-1))/jiecheng(2*(j-1));
}while (fang(x,2*(j-1))/jiecheng(2*(j-1))e);
printf("%lf",count);
}
//可以運行了,但是答案輸出來還是有問題……自己查查你的算法,我就不看了,暈的慌