Я вижу свою ошибку! Мне нужно выписать 1.d0 and 2.d0 instead of 1 and 2
, чтобы вычисления оценивались в двойном формате. Я также забыл умножить pi = val*4.d0
. Изменение программы cpi на
program cpi
double precision val, pi, MFLOPS
integer i, T1, T2
num = 1000000
val = 0.d0
call system_clock(T1) ! get time stamp
do i = 1, num
val = val + ((-1.d0)**(i+1.d0))/(2.d0*i-1.d0)
end do
call system_clock(T2) ! get time stamp
MFLOPS = num*2.d0/((T2-T1)*1.d8) ! compute MFlop/sec rate
pi = val*4.d0
print *, 'Estimated Value of PI:', pi
print *, 'The calculated number of MFLOPS is:', MFLOPS
end program cpi
возвращает
Estimated Value of PI: 3.1415916535897743
The calculated number of MFLOPS is: 3.0303030303030304E-002
Я также добавил вычисление MFLOPS, чтобы увидеть скорость вычислений.