如何在java中计算2 n 次的近似自然对数?
How to compute approximate natural log of 2 n times in java?
如果这听起来不太好,请原谅我,我的英语不是最好的。到目前为止,我的代码是这样的:即使我知道我做错了最多的事情。我知道这是错误的,但我不知道从哪里开始或如何更改标志。起初我这样做是想我们需要找到不同数字的 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 / 2
是0
.
如果您需要浮点精度,您应该使用浮点数,例如将 i
声明为 double
.
类型
如果这听起来不太好,请原谅我,我的英语不是最好的。到目前为止,我的代码是这样的:即使我知道我做错了最多的事情。我知道这是错误的,但我不知道从哪里开始或如何更改标志。起初我这样做是想我们需要找到不同数字的 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 / 2
是0
.
如果您需要浮点精度,您应该使用浮点数,例如将 i
声明为 double
.