【问题标题】:Clarification on "Calculate e^x without inbuilt functions in Java"关于“在 Java 中不使用内置函数计算 e^x”的说明
【发布时间】:2023-03-17 21:21:01
【问题描述】:

问题基本上是在没有 Java 内置函数的情况下计算 e^x。 编码顺序是 e^x = 1+x+x2/2!+x3/3!+x4/4!+ ...

这是我对这个问题的尝试:

public static void myexp(double x, double i){
    double j = 1.0;
    double sum = x;
    while (j <= i){
        j = j + 1;
        sum = sum + (sum * (x / (j)));
        System.out.println(sum + 1 + x);
    }
}

public static void main(String[] args) {
    double x = 1;
    double i = 5.0;
    myexp(x, i);
}

现在它不起作用,最终我放弃并查看了模型答案应该是什么样的(我知道,我知道)。这是它的内容(以我的代码风格):

public static void myexp(double x, double i){
    double j = 1.0;
    double sum = x;
    double result = 1.0;
    while (j <= i){
        j = j + 1;
        sum = sum * (x / (j));
        result = result + sum;
        System.out.println(result + x);
    }
}

现在不同的是包含了“结果”变量,它描述了序列的总和。但是,我以为我在写的时候已经合并了 “sum = sum+(sum*(x/(j)));”。 但是机器可以识别一种风格而不是另一种。什么给了?

【问题讨论】:

  • 这不是风格差异,您只是在进行根本不同的计算。
  • 是的:sum 不再是和(result 是)。

标签: java loops iteration


【解决方案1】:

在每次迭代中,您应该将术语添加到总和中

sum * x / j

其中sum 是在上一次迭代中添加的术语。

这意味着您必须将在前一次迭代中添加的术语存储在单独的变量中。

如果您对总数 result(应该是所有迭代的所有项的总和)和当前迭代的项 (sum) 使用相同的变量,您会得到完全不同的结果结果。

换句话说

sum = sum + (sum * (x / (j)));

不等于

sum = sum * (x / (j));
result = result + sum;

由于sum 的值取决于sum 的先前值,因此您无法消除该变量。

【讨论】:

  • 好的,我想我现在明白了!我挠了挠头,试图理解你想说的话;最终,我拿起笔在纸上,用两种方式迭代了代数的样子。是的,它们是不同的:在我的原始方法中添加的存在将复合到未来的迭代中。我想我的教训是:拆分你的迭代!分别迭代一个术语,并分别对这些术语求和。两条不同的路线需要两个不同的变量。谢谢! :)
  • (自我注释)基本上,它最初对我是隐藏的,因为我一直严格地向前看序列;在这种情况下,是的,我可以通过复制当前数字并将一个添加到调整后的另一个来创建一个总结性序列。但我错过的是向后看序列——因此我错过了添加将如何改变一切。
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 2022-01-14
  • 2021-01-24
  • 2015-09-26
  • 2013-09-14
  • 2021-03-10
  • 2013-06-15
  • 1970-01-01
相关资源
最近更新 更多