/**
* @(#)precision1.java
*
* precision1 application
*
* @author
* @version 1.00 2013/11/15
*/
public class precision1 {
public static void main(String[] args) {
// TODO, add your application code
int x = 4;
double increment = 1 ;
double coefficient = 1;
double currentValue = 1;
double precision = 0.01;
for( int i = 1;increment>precision ;i++)
{
currentValue= Math.pow(x,i)*coefficient+currentValue;
increment= Math.abs (Math.pow(x,i)*coefficient);
coefficient = coefficient * (1/(i+1));
System.out.println("Current result: " + currentValue);
}
}
}
问题是:如果给出了数字2,它应该询问用户的整数x和精度。它应该通过使用下面给出的公式,通过使用用户输入的x来计算e对于幂x的近似值。只要增量小于给定的精度值,程序就会停止计算。它也应该作为方法编写,而不是直接在main方法中编写。
,输出应为:
current result: 5.0
current result: 13.0
current result: 23.666666666666664
current result: 34.33333333333333
current result: 42.86666666666666
current result: 48.55555555555555
current result: 51.8063492063492
current result: 53.43174603174603
current result: 54.15414462081129
current result: 54.44310405643739
current result: 54.54818021484688
current result: 54.583205600983376
current result: 54.59398264287153
current result: 54.59706179769672
Result is 54.59706179769672
我的代码输出是:
Current result: 5.0
Current result: 5.0
无论询问输入部分为什么我的代码不起作用?
答案 0 :(得分:2)
通过调试器快速运行它 -
(1/(i+1))
是整数除法,导致coefficient = coefficient * (1/(i+1));
评估为0,从而
increment= Math.abs (Math.pow(x,i)*coefficient);
评估为0
答案 1 :(得分:0)
你的系数错了。你应该把它设置为1 /(1 + i)。与您发现的其他用户使用整数一样。
答案 2 :(得分:0)
您的问题在表达式1/(i+1)
中是整数除法 - 对于任何i >=2
,这将评估为0。
我建议你改变
coefficient = coefficient * (1/(i+1));
到
coefficient = coefficient / (i+1);
甚至只是
coefficient /= i + 1;
将正确评估,因为coefficient
是双倍的。
答案 3 :(得分:0)
您的数字被定义为整数,而不是双数。
for (int i = 1; increment > precision; i++) {
currentValue = Math.pow(x, i) * coefficient + currentValue;
increment = Math.abs(Math.pow(x, i) * coefficient);
coefficient = coefficient * (1d / (i + 1d)); // here is fix
System.out.println("Current result: " + currentValue);
}