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
答案 0 :(得分:3)
hit = hit + 1
。 hit
可以初始化为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