我目前正在从事大学的一项练习。
我必须使用泰勒级数来计算cos(x)。我还被允许使用Math.PI,这就是为什么我实现了自己的pow,square和阶乘方法的原因。但是我只是得到-0.5的NaN而应该是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);
    }
  }
}


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

最佳答案

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

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

关于java - 用泰勒级数计算cos(x),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58700749/

10-10 17:27