我正在尝试制作一种使用泰勒级数找到变量自然对数近似值的方法。
我知道这个Math.log(a)
方法,不想在这里使用它。
问题是对于大于 2 的数字,返回的结果是NaN
. 仅当外部for
循环设置为执行大量次时才适用。例如n < 10
给出一个结果,但不是一个准确的结果。但是,外部for
循环运行的次数越多,结果就越准确。
用于查找的泰勒级数ln(x)
(基本上是我试图用 java 代码编写的)
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++;
}
}
在这一点上,我真的被卡住了,不确定问题出在哪里,也许我只是想在没有适当工具的情况下做一些事情。