2

我正在尝试制作一种使用泰勒级数找到变量自然对数近似值的方法。

我知道这个Math.log(a)方法,不想在这里使用它。

问题是对于大于 2 的数字,返回的结果是NaN. 仅当外部for循环设置为执行大量次时才适用。例如n < 10给出一个结果,但不是一个准确的结果。但是,外部for循环运行的次数越多,结果就越准确。

用于查找的泰勒级数ln(x)(基本上是我试图用 java 代码编写的) 寻找 <code>ln(x)</code> 的泰勒级数

public static double nat_log(double x) {
  double result = 0.0;
  for (int n = 1; n < 10000; n++) {
    double a = x - 1;
    int b = 1;
    for (int j = 1; j < n; j++) {
      a *= (x - 1);
      b *= -1;
    }
    result += b * a / n;
  }
    return result;
  }

我的逻辑是,在某些时候a变得太大并被读取为 a NaN,从而丢弃了其余代码。所以我尝试了一个使用while循环的版本和Double.isNaN(double)检查是否a曾经成为NaN. 结果是一个无限循环。

public static double nat_log(double x) {
  double result = 0.0;
  double a = x - 1;
  int count = 1;
  while (Double.isNaN(a) == false) {
     a = x - 1;
     int b = -1;
     for (int j = 0; j < count; j++) {
       a *= (x - 1);
       b *= -1;
     }
     result += b * (a / count);
     count++;
   }
 }

在这一点上,我真的被卡住了,不确定问题出在哪里,也许我只是想在没有适当工具的情况下做一些事情。

4

1 回答 1

-1

当计数溢出时,您的 while 循环将变为无限循环

于 2016-04-13T05:38:57.310 回答