计算2的自然对数值的程序

时间:2014-08-05 21:34:14

标签: c++ loops math logarithm

我正在尝试编写一个程序,从用户读入计算2的自然对数时使用的术语数.EX:Log(2),5个术语是1/1 - 1/2 + 1/3 - 1/4 + 1/5。每个后续术语的分母增加1,并且每个术语之间的加法和减法符号交替。我似乎无法找到正确的循环设置,使其正常工作。任何帮助,将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用倍增系数从+1切换到-1,然后在迭代时再次+1,然后将当前的1 / n项乘以。

double ln2(int terms) {

    double sign = 1.0
    double log = 0.0;

    for (double n = 1; n <= terms; n += 1.0) {
        // calculate your 1/n term here
        log += sign / n;    // == sign * 1.0 / n

        // and reverse polarity for the next iteration
        sign = -sign;
    }

    return log;
}

注意:这个系列慢慢收敛非常

答案 1 :(得分:1)

你取的是(-1)^ n * -1 / n之和。如果你合并两个相邻的术语

  

( - 1)^(2n-1)* -1 /(2n-1)+( - 1)^(2n)* -1 /(2n)= 1 /(2n-1) - 1 /( 2n)= 1 /(4 * n ^ 2 - 2 * n)

所以你可以做到

double ln2(int lim) {
    double sum;
    for (int n = 1; n <= lim; n++) {
        sum += 1.0/n/(4*n - 2);
    }
    return sum;
}

这仍然不快,但其收敛行为更好。

答案 2 :(得分:0)

您可以拥有一个单独的变量n,每次添加一个变量,检查它是否与if (n%2 == 0)相同。如果是这样,请将分母乘以-1。