/**
* @ClassName Test
* @Description: TODO
* @Author zxsilent
* @Date 2019/9/21
* @Version V1.0
**/
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入x:");
double x = scanner.nextDouble();
double taylor = Taylor(x);
System.out.println(taylor);
}
//定义求阶乘的方法,递归
public static int Factorial(int n) {
if (n < 0) {
return 0;
} else if (n >= 0 & n <= 1) {
return 1;
} else {
return n * Factorial(n - 1);
}
}
//保留小数点后六位小数
public static double decimal(double num) {
BigDecimal bd = new BigDecimal(num);
BigDecimal bd1 = bd.setScale(6, bd.ROUND_HALF_UP);
num = bd1.doubleValue();
long ll = Double.doubleToLongBits(num);
return num;
}
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-6;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 decimal(sum);
}