【问题标题】:java approximate e using the seriesjava近似e使用系列
【发布时间】:2018-03-22 13:30:26
【问题描述】:

我需要使用级数来近似 e:e= 1+ 1/1! +1/2!+..+1/n! which n=100000 这是我所做的,但它拒绝编译..

public class Test {


  public static void main(String args[]) {
      long e = 0;
      for (int i = 1; i <= 100000; i++) {
   e += 1.0 / factorial(i);       
      }

      System.out.println(e);
   }
   public static long factorial(long number) {
      if (number <= 1) return 1;
      else return number * factorial(number - 1);
   }
}

【问题讨论】:

  • 你的标题没有意义;这似乎没有传输十个数字,使用套接字或在 C 中。至于 Java 问题,这段代码对我来说编译得很好,但没有成功运行。
  • Java 不只是“拒绝”编译,您会收到特定的错误消息,通常指向程序中的特定位置。

标签: java approximate


【解决方案1】:

我会使用双精度而不是长整数来防止任何错误。

100000 次迭代绝对没有必要。您最多可以在 100 之后停止。

因为 e = 1 + 1/n!从 e=1 开始,否则你将得到 1.718。

像这样的阶乘方法会简单得多,而且不必调用自己

public static double factorial(int number) 
  {
  double factorial = 1;
  while (number>1)
  {
      factorial*=number;
      number--;
    }
  return factorial;
 }

【讨论】:

    【解决方案2】:

    您的代码有 2 个问题:

    1. 您需要将e 定义为双精度。
    2. 100000 是多次迭代的方式,你得到 StackOverflow,你将在 18 的迭代中达到最大精度并得到1.7182818284590455。在那之后它不会改变。

    这也不是e,但这是一个单独的问题。如果你真的想得到 e 的近似值,你还需要给它加一个。或者以double e = 1开头。

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2018-01-13
      相关资源
      最近更新 更多