1.
站在用戶的角度思考問題,與客戶深入溝通,找到景縣網(wǎng)站設(shè)計(jì)與景縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋景縣地區(qū)。
c語言中要編寫sin函數(shù),實(shí)質(zhì)上要利用sin的泰勒公式,然后根據(jù)泰勒公式,將其中的每一項(xiàng)進(jìn)行分解,最后用循環(huán),累加計(jì)算出最終結(jié)果
2.
下面用for循環(huán)實(shí)現(xiàn)sin的算法,程序代碼如下:
#include
#include
void
main()
{
int
i;
float
x,sum,a,b;
//sum代表和,a為分子,b為分母
char
s;
printf("please
input
x");
scanf("%f",x);
s=1;
sum=0;
a=x;
//分母賦初值
b=1;
//分子賦初值
for(i=1;a/b=1e-6;i++)
{
sum=sum+s*a/b;
//累加一項(xiàng)
a=a*x*x;
//求下一項(xiàng)分子
b=b*2*i*(2*i+1);
//求下一項(xiàng)分母
s*=-1;
}
printf("sum=%f\n",sum);
}
3.
關(guān)于上述程序的幾點(diǎn)說明:上述程序的計(jì)算結(jié)果精確到小數(shù)點(diǎn)后六位;上述程序運(yùn)用了sin的泰勒展開式
sin
x=x-x^3/3!+x^5/5!
......
,程序中將sin泰勒公式中的每一項(xiàng)拆成了分子,分母以及每一項(xiàng)前的符號(hào)這三項(xiàng),以便于每一項(xiàng)的累加
#includestdio.h
#includemath.h
#define N 10000000
void main()
{
double sum=0;
int i;
for(i=0; iN; i++)
{
sum += sin((double)(i)/N)/N;
}
printf("%lf\n%lf",sum,1-cos(1));
}
N后面的0有點(diǎn)多了,不過這個(gè)數(shù)剛好能精確到小數(shù)點(diǎn)后6位。
當(dāng)然,這個(gè)程序的算法實(shí)在是太垃圾了,效率非常的低下……
??
解法一 ∫sin(x)dx = cos(x) +c 積分公式
double jfSin(double x, double y)
{
return cos(y) - cos(x)
}
解法二 野蠻近似法
d是精度
double jfSin(double x, double y, double dx)
{ double ret;
for(; x =y; x+= dx)
{
ret += sin(x);
}
return ret;
}
有區(qū)別:這里假定pi是double型的變量
1)x為整型時(shí),y=sin(x*pi/180);會(huì)先計(jì)算x*pi得到double型數(shù)據(jù)(因?yàn)閜i的類型),然后再做除法
z=sin(x/180*pi);會(huì)先計(jì)算x/180得到整型數(shù)據(jù)(因?yàn)榉肿?、分母均整?小數(shù)部分被
截?cái)嗔巳缓笤倥cpi相乘得到double類型結(jié)果
應(yīng)當(dāng)寫做:z=sin((double)x/180*pi);或z=sin(x/180.0*pi);
只要分子、分母中有一個(gè)數(shù)據(jù)類型是double的會(huì)使編譯程序調(diào)用double類型的
運(yùn)算步驟。
2)x是double型但取值很大時(shí)
y=sin(x*pi/180);會(huì)先計(jì)算x*pi,如果x的值大得x*pi會(huì)超出double類型表示范圍時(shí)就會(huì)出問題
y=sin(x/180*pi);會(huì)先計(jì)算除法,這樣先縮小得數(shù)再做乘法保證結(jié)果不會(huì)溢出