【问题标题】:A loop in fortran code doesn't obey loop rulesfortran 代码中的循环不遵守循环规则
【发布时间】:2015-03-23 20:51:22
【问题描述】:

首先,我是 fortran 的新手。我试图在 0.0000005 的容差范围内找到 1/e 的值。我使用了 1/e 的求和表示,即 (epsilon) n 从零到无穷大 ((-1)^n)/n!。我从n=2开始,当值为1/n!小于我的容差,程序将停止并打印计算出的总值。但是我的程序只进入 n=3 并且只打印 1/3 的值!这是 1.666666。 !程序被编辑。编辑后的表格是计算我想要的。在外部while的条件是(num3

   program Ecalculator
   implicit none

   integer :: mult,num1,n,num4,num5
   real :: summ,num3,fact

   mult=1
   n=2.0
   fact=1.0
   summ=0.0

      DO WHiLE(n<13)
      fact=n
      num1=n-1

             DO WHiLE(num1>0)
             fact=fact*num1;
             num1=num1-1;

             END DO

       fact=fact*mult;
       num3=1.0/fact;
       mult=mult*(-1);
       summ=summ+num3;
       n=n+1;

        END DO

    print *, summ
    read  *, num5

    end program Ecalculator

【问题讨论】:

  • 您似乎没有将num3 初始化为任何内容。即使保证它是零初始化的,也很有可能你甚至没有进入你的外循环......
  • num1 是一个整数,所以n-1 也将是一个整数,尽管n 是一个实数。这是故意的吗?
  • 另外,REAL 没有您需要的精度。你需要一个双精度类型。

标签: while-loop fortran nested-loops


【解决方案1】:

看起来阶乘计算不正确:fact=num4*num1 行可能没有执行您想要的操作,因为 num4 只是分配为 n 并且在整个内部循环中永远不会更改。我认为您不需要num4fact 这两个变量;您可以将它们组合成一个变量。

【讨论】:

  • 我改变了你所说的阶乘循环,现在计算正确。数到 3 怎么样。当 n 达到 3 时,外部循环突然中断。
  • 也许num3 是一个整数,而不是预期的浮点数。您可以尝试使用num3=1.0/fact 而不是num3=1/fact
  • 我尝试了你所说的并将外循环的条件从 (num3
  • 您能否更新您的帖子以包含您的代码的当前版本?
  • 感谢布伦特·克比。现在解决了。更新后的程序现在开始计算。
猜你喜欢
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多