import java.util.Scanner;
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供璧山網(wǎng)站建設(shè)、璧山做網(wǎng)站、璧山網(wǎng)站設(shè)計(jì)、璧山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、璧山企業(yè)網(wǎng)站模板建站服務(wù),十載璧山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
public class Test{
public static void main(String[] args){
System.out.print("輸入x:");
Scanner in=new Scanner(System.in);
double x=in.nextDouble();
System.out.println("cos"+x+"="+Taylor(x));
}//COSx=1-x2/2!+x4/4!-x6/6!+x8/8!..
public static double Taylor(double x){
int i,k;
long fac=1;//階乘
double n=1,y=1,sum=1;
for(i=2;(Math.abs(y))=1e-8;i+=2)
{ n=n*(-1);
for(k=1;k=i;k++)
fac=fac*k;
y=Math.pow(x, i)*n/fac;
sum+=y;
fac=1;
}
return sum;
}
}
//請(qǐng)采納!
package?com.cainiaoqi;
import?java.util.Scanner;
public?class?Test?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
double?x?=?0;
Scanner?in?=?new?Scanner(System.in);
System.out.print("請(qǐng)輸入x:");
x?=?in.nextDouble();
System.out.println("sin("+x+")?=?"+calcsin(x));
}?
static?double?calcsin(double?x)?{
double?result?=?0;
int?temp?=?0;
while((Math.pow(x,2*temp+1)/jiecheng(2*temp+1))??1.0E-8)?{
result?+=?(Math.pow(x,2*temp+1)/jiecheng(2*temp+1))*Math.pow(-1,?temp);
temp?++;
// System.out.print("第"+temp+"次迭代!"?);
// System.out.println(result);
}
return?result;
}
static?int?jiecheng(int?x)?{
if(x==1)
return?1;
else?
return?jiecheng(x-1)*x;
}
}
根本性的邏輯問題。
你也看到pi定義為使sin(x) = 0的最小正實(shí)數(shù),
要從這個(gè)角度逼近Pi的話,應(yīng)該嘗試代入一系列遞增的正實(shí)數(shù)x,直到sin(x)很小.
但是你只在main函數(shù)里取了x = 1,之后x的值就沒變過。
即便條件滿足了(其實(shí)是不可能的),也只能輸出x = 1。
冪級(jí)數(shù)是用來計(jì)算sin(x)的,隨著n的增大精度提高。
變量dRt的意義是級(jí)數(shù)的部分和,是隨著n的增大而趨近sin(x)的。
但在dRt還沒有充分接近sin(x)的時(shí)候,abs(dRt)lt;pow(10,-80)這個(gè)判斷沒有任何意義。
要按這個(gè)思路編的話,可以寫一個(gè)用冪級(jí)數(shù)求sin(x)的函數(shù)(比如叫psin(x))。
然后在main里用二分法求x,直到psin(x)充分小。
不過因?yàn)樾枰啻斡?jì)算psin(x),這種方法的效率很低。