扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
import java.util.Scanner;
创新互联建站专业为企业提供璧山网站建设、璧山做网站、璧山网站设计、璧山网站制作等企业网站建设、网页设计与制作、璧山企业网站模板建站服务,十载璧山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
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;
}
}
//请采纳!
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("请输入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的最小正实数,
要从这个角度逼近Pi的话,应该尝试代入一系列递增的正实数x,直到sin(x)很小.
但是你只在main函数里取了x = 1,之后x的值就没变过。
即便条件满足了(其实是不可能的),也只能输出x = 1。
幂级数是用来计算sin(x)的,随着n的增大精度提高。
变量dRt的意义是级数的部分和,是随着n的增大而趋近sin(x)的。
但在dRt还没有充分接近sin(x)的时候,abs(dRt)lt;pow(10,-80)这个判断没有任何意义。
要按这个思路编的话,可以写一个用幂级数求sin(x)的函数(比如叫psin(x))。
然后在main里用二分法求x,直到psin(x)充分小。
不过因为需要多次计算psin(x),这种方法的效率很低。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流