用泰勒级数计算cos(x)

时间:2019-11-04 20:41:26

标签: java trigonometry taylor-series

我目前正在从事我的大学练习之一。 我必须使用泰勒级数来计算cos(x)。我还被允许使用Math.PI,这就是为什么我实现了自己的pow,square和factorial方法的原因。但是,我得到的NaN是-.5,而它应该是0.87

在下面我将我的班级的当前状态。

    class Cosinus{

    private static double square(double x){ 
        return x*x;
    }


    public static double pow(double basis, int exp){ 
    if(exp == 0){
      return 1;
    }else{
      return (square(pow(basis,exp/2))*(exp%2==1?basis:1));
    }
    }

  public static int fac(int n){
    int result = 1;
    while (n > 1){
      result *= n;
      n -= 1;
    }
    return result;
  }

  public static void main(String[] args){
    if(args.length != 1){
       System.out.println("ERROR PLEASE ENTER A NUMBER");
     }
    else if(Double.parseDouble(args[0])>((Math.PI)*2) || Double.parseDouble(args[0]) < ((Math.PI)*-2)){
       System.out.println("ERROR PLEASE ENTER A NUMBER BETWEEN 0 AND 2 PI   ");
     }
    else {
      double x = Double.parseDouble(args[0]);
      if(x < 0) x *= -1;
      double sum = 1;
      for(int i=2; i<=20; i++){
        sum -= (pow(x, (i*4))/fac(i*4))-(pow(x, (i*4+2))/fac(i*4+2));
      }
      System.out.println(sum);
    }
  }
}

如果有人可以帮助我,那会很好

1 个答案:

答案 0 :(得分:0)

Factorial(20)为2e18,大于int可以容纳的大小。如果您将fac方法更改为使用long,它将为您带来预期的结果:

public static long fac(int n) {
  long result = 1;
  while (n > 1) {
    result *= n;
    --n;
  }
  return result;
}