为什么fortran计算不正确?

时间:2017-02-08 17:42:25

标签: fortran fortran77

       program partOne
       integer hit, i
       real x, y, equation, finalE, compE, finalHit
       parameter (pi = 3.1415926535)

c This program computes pi using the Monte Carlo method
         do 10 i = 1, 1000000
          x = rand()
          y = rand()
          equation = sqrt((x*x) + (y*y))
          if (equation .LE. 1.0) hit = hit + 1
 10    continue
       write(*,*) 'hits = ', hit
       finalHit = hit
       write(*,*) 'finalHits = ', finalHit
       finalE = ((finaHit/1000000) * 4)
       write(*,*) 'pi = ', pi
       write(*,*) 'Computed pi = ', finalE
       END PROGRAM partOne

为什么finalE无法正确计算?一切似乎都正确分配,但是当方程式完成时,它就完全错了。它应该接近pi。

  

更新:

       program partOne
       integer hit, i
       real x, y, equation, finalE, compE, finalHit
       parameter (pi = 3.1415926535)

c This program computes pi using the Monte Carlo method
       hit = 0
         do 10 i = 1, 1000000
          x = rand()
          y = rand()
          equation = sqrt((x*x) + (y*y))
          if (equation .LE. 1.0) hit = hit + 1
 10    continue
       write(*,*) 'hits = ', hit
       finalHit = hit
       write(*,*) 'finalHits = ', finalHit
       finalE = ((finaHit/1000000.0) * 4.0)
       write(*,*) 'pi = ', pi
       write(*,*) 'Computed pi = ', finalE
       END PROGRAM partOne
  

更新后的结果:

 hits =       785524
 finalHits =    785524.00    
 pi =    3.1415927    
 Computed pi =  -5.21399923E+23

1 个答案:

答案 0 :(得分:3)

hit = hit + 1hit可以初始化为0或其他值,具体取决于您的编译器和其他选项。在递增它的循环之前添加hit = 0

finalE = ((finaHit/1000000) * 4)应为finalE = ((finalHit/1000000.0) * 4.0)。未定义finaHit,因此将其更改为finalHit。应将real值相乘并添加到real值,添加.0以使其成为真实值。

进行这些更改:

 $ a.out
 hits =       785524
 finalHits =    785524.000
 pi =    3.14159274
 Computed pi =    3.14209604