Java 通过求和计算指数的循环说明
我是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 通过求和计算指数的循环说明,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 我犯了
另外,将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