您链接到的方程式是一个无限级数,正如方程式主要部分后面的省略号所暗示的那样,并且在同一页面上的前面的公式中更明确地表明了这一点:

在您的情况下,您只计算前四个术语。后面的术语将对结果进行小的改进以更接近实际值,但最终计算所有无限步将需要无限时间。
但是,您可以做的是近似您对以下内容的响应:
double ln(double x) {
// validate 0 < x < 2
double threshold = 1e-5; // set this to whatever threshold you want
double base = x-1; // Base of the numerator; exponent will be explicit
int den = 1; // Denominator of the nth term
int sign = 1; // Used to swap the sign of each term
double term = base; // First term
double prev = 0; // Previous sum
double result = term; // Kick it off
while (fabs(prev - result) > threshold) {
den++;
sign *=- 1;
term *= base;
prev = result;
result += sign * term / den;
}
return result;
}
注意:我还没有实际测试过这个,所以它可能需要一些调整。
这样做是计算每个术语,直到两个连续术语之间的绝对差小于您建立的某个阈值。
现在这不是一种特别有效的方法。最好使用您正在使用的语言(在本例中为 C++)提供的函数来计算自然对数(我相信另一张海报已经向您展示过)。但是自己尝试一下,看看它是如何工作的,可能会有一些价值。
x
此外,正如下面的 barak manos 所指出的,这个泰勒级数只收敛于 (0, 2) 范围内,因此在尝试运行实际计算之前,您需要验证该范围内的谎言值。