如何编码日志/处理NaN的

时间:2016-04-13 04:40:17

标签: java nan logarithm natural-logarithm

我正在尝试使用Taylor系列创建一个找到变量自然对数近似值的方法。

我知道Math.log(a)方法,不希望在此处使用它。

问题是,对于大于2的数字,返回的结果为NaN。 仅当外for循环设置为执行很多次时才会出现这种情况。 例如n < 10给出结果,但不是准确结果。 但是,外部for循环越多,结果就越准确。

Taylor系列用于查找ln(x)(基本上我正在尝试用java代码编写) Taylor Series for finding <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变得太大而被读作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++;
   }
 }

此时我真的陷入困境,不确定问题到底在哪里,也许我只是想在没有适当工具的情况下做点什么。

1 个答案:

答案 0 :(得分:-1)

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