【发布时间】:2015-07-21 21:43:31
【问题描述】:
//java program that asks the user to input a number that e^x=1+x+x^2/2! +x^3/3!... e is a mathematical constant equal to 2.718...
import java.util.Scanner;
public class taylor_2 {
public static void main(String args[]) {
Scanner input=new Scanner(System.in);
double x; //input for x
double factorial=1; //initializes factorial
int counter=1; //initializes counter
double result=1; //initializes result
System.out.println("Enter non negative number"); //asks user to enter x
x=input.nextInt();
//output in while loop will continue to be generated if user doesn't entered a negative number
while(x<1){
System.out.println("I said entered a positive number");
x=input.nextInt();
}
while(x>counter){
factorial=factorial*counter;//factorial formula
result=result+(Math.pow(x,counter))/factorial; //equation for e^x=1+x+x^2/2! +x^3/3!
counter++;
}
System.out.println("Taylor series is " +result);//output for taylor equation e^x
}
}
这是我的代码的输出:
输入非负数
2
泰勒级数是 4.0
当我输入 2 时,它应该输出 7.3890560983 而不是 4.0,因为 e=2.718... 和 e^2=7.3890560983。我做错了什么?
【问题讨论】:
-
关于您的许多 // cmets 的旁注:它们几乎一文不值。注释应该只在你想解释为什么做某事时才写;但是您的 cmets 只是重复已经存在且显而易见的内容。这样的 cmets 只会让阅读源代码变得更难。他们混淆而不是澄清。此外:类名应以大写字母开头;不是小写。
-
为了帮助您解决问题:为什么要将
result初始化为 1?为什么不添加更多 system.out.println 语句来打印循环中的各种值?换句话说:你期望别人调试你的代码;而......你已经有了代码;你让它运行;并且您可以轻松找出在计算过程中“发生”了什么。 -
泰勒级数对从 0 到无穷大的
counter的值求和,您仅对x求和,这不足以获得接近该级数收敛的值.显着增加它。将行while(x>counter){更改为while(100>counter){
标签: java algorithm taylor-series