为什么 fortran 计算不正确?

Why is fortran not computing correctly?

       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计算不正确?一切似乎都分配正确,但等式完成后却完全错误。它应该接近圆周率。

Updated:

       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

Results after update:

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

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

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

进行这些更改:

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