2017-02-08 14 views
-1
 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 

ответ

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 
+0

Я попытался сделать изменения в моем обновленном коде, который вы рекомендовали. Но это не дает мне результат. Что я пропустил из ваших рекомендаций? Я извиняюсь. Сегодня я слишком долго сижу на компьютере, и я уверен, что мне не хватает чего-то очевидного. Я очень благодарен за помощь – XXIV

+0

Я добавил обновленный код к исходному вопросу btw. – XXIV

+2

'finalHit' является реальным, поэтому' finalHit/1000000' является реальным выражением и эквивалентно 'finalHit/1000000.0'. – francescalus