我正在尝试使用Taylor系列创建一个找到变量自然对数近似值的方法。
我知道Math.log(a)
方法,不希望在此处使用它。
问题是,对于大于2的数字,返回的结果为NaN
。
仅当外for
循环设置为执行很多次时才会出现这种情况。
例如n < 10
给出结果,但不是准确结果。
但是,外部for
循环越多,结果就越准确。
Taylor系列用于查找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
变得太大而被读作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++;
}
}
此时我真的陷入困境,不确定问题到底在哪里,也许我只是想在没有适当工具的情况下做点什么。
答案 0 :(得分:-1)
当计数溢出时,你的while循环变为无限循环