【问题标题】:Calculating cos(x) with a Taylor Series用泰勒级数计算 cos(x)
【发布时间】:2020-03-01 04:50:28
【问题描述】:

我目前正在做我的一项大学练习。 我必须使用泰勒级数计算 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);
    }
  }
}

如果有人可以帮助我,那就太好了

【问题讨论】:

  • 您的fac() 方法肯定会溢出。你不能使用int 来处理这样的巨大数字。
  • 已经改成long 谢谢^^

标签: java trigonometry taylor-series


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2020-04-01
    • 1970-01-01
    • 2021-08-12
    • 2014-03-27
    • 2015-05-15
    • 1970-01-01
    • 2016-04-26
    • 2022-06-10
    相关资源
    最近更新 更多