如何在java中计算2 n 次的近似自然对数?

How to compute approximate natural log of 2 n times in java?

说明是: 1。通过将系列中的 n 项相加,计算 2 的 ln。 a) 可以用数列近似求出 2 的自然对数。更多条款 你使用,越接近 2 的自然对数。 b) ln 2 = 1 - 1/2 + 1/3 - 1/4 + 1/5 - ... 1/n c) 你将需要使用 a For Loop 来解决这个问题 d) 你将只为这个程序传递 1 个参数,即 n 的值。 e) 你需要弄清楚如何改变每个连续学期的符号。 这并不难,但需要一些思考。

如果这听起来不太好,请原谅我,我的英语不是最好的。到目前为止,我的代码是这样的:即使我知道我做错了最多的事情。我知道这是错误的,但我不知道从哪里开始或如何更改标志。起初我这样做是想我们需要找到不同数字的 ln,但后来才知道它是输入 n。 编辑:我相信我知道我做错了什么主要部分。我尽我所能解决了这个问题。我现在有点卡住了,因为我在脑海中发挥逻辑,我相信它应该有效。相反,它打印出来的是 1.0 1.0 1.0 1.0 1.0

谁能帮忙指出我做错了什么?

public class aprox_log {

static double findLog (int n)
{
    double ln = 1;
    for (int i = 1; i <= n; i++)
    {
        for (int k = 0; i <= n; k++) {
            if ((k%2) == 0)
                ln = ln - (1/i);
            ln = ln + (1/i);
        }
    }
return 1 - ln;
}

public static void main(String[] args) {
    //These lines print the results of test inputs.
    System.out.println(findLog(2)); //~0.69314718056
    System.out.println(findLog(5)); //~1.60943791243
    System.out.println(findLog(10)); //~2.30258509299
    System.out.println(findLog(9)); //~2.19722457734
    System.out.println(findLog(1)); //0
}

}

新代码:

    public class aprox_log {

static double findLn (int n)
{
    double ln = 0;
    for (int i = 1; i <= n; i++)
    {
        if (i%2 == 0)
            ln = ln - (1/i);
        ln = ln + (1/i);
    }
return ln;

public static void main(String[] args) {
    //These lines print the results of test inputs.
    System.out.println(findLn(2)); //0.5
    System.out.println(findLn(5)); //0.783333333
    System.out.println(findLn(10)); //0.64563492063
    System.out.println(findLn(9)); //0.74563492063
    System.out.println(findLn(1)); //1
}

}

`

要找到具有 n 项的交替调和级数的总和,只需循环从 1 到 n 的整数。然后,如果是奇数就加上当前数的倒数,如果是偶数就减去倒数。

static double findLog(int n){
    double res = 0;
    for(int i = 1; i <= n; i++) res += 1d / (i % 2 == 0 ? -i: i);
    return res;
}

在Java中,运算符/根据给定的数字的准确性计算结果。特别是,如果我们除以两个 int,结果将表示为 int,如果不能准确表示结果,则向 0 舍入。即1 / 20.

如果您需要浮点精度,您应该使用浮点数,例如将 i 声明为 double.

类型