为什么 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 + 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
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 + 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