使用数值方法计算e期间的浮点不准确性

时间:2016-08-15 14:47:29

标签: java variables double precision

所以我用数值方法计算e(图中的第三行)。

enter image description here

我增加了每次迭代使用的元素数量。当我执行程序时,浮点变量以我不理解的方式表现。这是程序和结果。

import java.util.Scanner;

    public class Test {

       public static void main(String[] args) {

          Scanner input = new Scanner(System.in);

          int factorial = 1;
          int counter = 0;
          int iterationNumber;
          double total = 0;
          int tempCounter;

          System.out.print("Enter iteration number: ");
          iterationNumber = input.nextInt();

          while (counter <= iterationNumber) {

             tempCounter = counter;

             while ((tempCounter - 1) > 0) {
                factorial *= tempCounter;
                tempCounter--;
             }

             total += ((double)1 / factorial);
             System.out.println(total);

             factorial = 1;
             counter ++;
          }
       }
    }

enter image description here

所以我的问题是为什么e的值在一段时间后开始减少而不是增加?我想了解浮点变量在此程序中的行为及其背后的逻辑。

另一个问题是为什么它开始说无限?

1 个答案:

答案 0 :(得分:3)

n!快速超过Integer.MAX_VALUE并溢出为负数。然后,您将为总数添加负数 - 因此减少。

您可以使用BigDecimal进行计算。它比较慢,但会完成这项工作。