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.Почему fortran неправильно вычисляет?
Обновлено:
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
Я попытался сделать изменения в моем обновленном коде, который вы рекомендовали. Но это не дает мне результат. Что я пропустил из ваших рекомендаций? Я извиняюсь. Сегодня я слишком долго сижу на компьютере, и я уверен, что мне не хватает чего-то очевидного. Я очень благодарен за помощь – XXIV
Я добавил обновленный код к исходному вопросу btw. – XXIV
'finalHit' является реальным, поэтому' finalHit/1000000' является реальным выражением и эквивалентно 'finalHit/1000000.0'. – francescalus