Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过求和计算指数的循环说明_Java_Loops_For Loop_Sum_Exponential - Fatal编程技术网

Java 通过求和计算指数的循环说明

Java 通过求和计算指数的循环说明,java,loops,for-loop,sum,exponential,Java,Loops,For Loop,Sum,Exponential,我是Java新手,我想澄清一下这个循环是如何工作的。循环应该近似于1的幂的指数: 如果我输入numTerms=0,它会给出exp1=0。它是 因为这个循环没有添加任何内容,所以它给了我0?0怎么样 确切地说 如果我输入numTerms=1,它会给出expr1=1。自从 第一次迭代:i=1,然后fac=1,然后exp=0+1/1=1。对吧? 如果我输入numTerms=2,它会给出exp1=2。为什么?依我看 逻辑,通过第二次迭代,i=2,fac=1*2=2,然后exp=1+1/2=3/2 我犯了

我是Java新手,我想澄清一下这个循环是如何工作的。循环应该近似于1的幂的指数:

如果我输入numTerms=0,它会给出exp1=0。它是 因为这个循环没有添加任何内容,所以它给了我0?0怎么样 确切地说

如果我输入numTerms=1,它会给出expr1=1。自从 第一次迭代:i=1,然后fac=1,然后exp=0+1/1=1。对吧?

如果我输入numTerms=2,它会给出exp1=2。为什么?依我看 逻辑,通过第二次迭代,i=2,fac=1*2=2,然后exp=1+1/2=3/2

我犯了什么错误


另外,将fac和exp初始化为0.0有什么意义?第三行代码

这整个代码是一个计算自然对数的数学常数e基数的数值方法,但你已经知道了

for循环的语法允许声明多个变量,但它们必须是相同的类型。 这就是为什么在循环之前声明i和fac。 双fac,exp=0.0;语句声明这两个变量,但只初始化exp,类似的事情发生在int i

任何数值方法的计算精度都严格取决于这种情况下的步数,即给定的迭代次数。 由于步数不足,计算值可能非常不准确,或者在使numTerms=0或numTerms=1的情况下-输出完全错误

对于0,您是对的

对于numTerms=1,它是1,因为对于第一次迭代,i等于0,fac被初始化为1.0。fac*=i在代码块之后计算

对于numTerms=2:如果i达到2,则循环的条件为false:

public class exp {
    public static void main(final String args[]) {
        int i, numTerms = 10;
        double fac, exp = 0.0;
        for (i = 0, fac = 1.0; i < numTerms; i++, fac *= i) {
            exp += 1.0/fac;
        }
        System.out.println("exp(1) = "+exp);
        System.out.println("Error is "+Math.abs(Math.E-exp));
    }
}
在启动之前,如果存在变量,则进行初始化,然后检查条件变量可能已经超过条件中的限制。如果条件为true,则调用代码块。 在代码块之后,将调用增量/更新表达式,然后在运行代码块之前,再次检查条件。 所以它会这样:

第一次迭代:i=0,fac=1->exp+=1/1=>exp=1 第二次迭代:i=1,fac=1->exp+=1/1=>exp=2

在第二次迭代之后,对更新表达式进行求值:i=2,fac=2-但对于i=2,循环条件为false

我不太明白0到底是如何导出的?根据你的问题,但我希望我已经回答了:

也许这是一个有趣的事实。您已经询问过i和fac的初始化,它实际上发生在for循环中。但有可能做到:

for(initialization;condition;increment/update)
for循环可以重写为while,反之亦然。
为……写作;;与whiletrue相同。

循环的迭代次数始终与numTerms的值相同,这似乎是您误解了的内容,您应该看看
for(initialization;condition;increment/update)
int i = 0, numTerms = 2;  //the i is not only declared but also initialized here
double fac = 1.0, exp = 0.0; //same with fac
for (;i < numTerms; ++i, fac *= i) //so no need to do it again in for