У меня есть программа, которая перебирает одну переменную и вычисляет значение на каждом шаге:
program cpout
implicit none
!declarations
integer, parameter :: dp = selected_real_kind(15)
! kind value for double precision
real(dp), parameter :: Ru = 8.314472_dp
real(dp) :: cp
integer :: loT, hiT, i
real(dp) :: iT
real(dp),dimension(14) :: ic8a
real(dp) :: ic8t
real(dp) :: ic8c
loT = 300
hiT = 3000
! ic8a is populated using a subroutine call
! I have checked, it reads in reals as it is supposed to
do i = loT, hiT, 1
iT = real(i,dp)
if (iT > ic8t) then
ic8c = Ru*(ic8a(1) + ic8a(2)*iT + ic8a(3)*(iT**2)
* + ic8a(4)*(iT**3) + ic8a(5)*(iT**4))
else
ic8c = Ru*(ic8a(8) + ic8a(9)*iT + ic8a(10)*(iT**2)
* + ic8a(11)*(iT**3) + ic8a(12)*(iT**4))
end if
end do
end program cpout
В моей первой попытке я использовал iT
в качестве счетчика целочисленных циклов, а затем использовал его непосредственно в формуле. Это дало кусочный график для iT
> ic8t
. Когда я добавил i
в качестве счетчика и преобразовал iT
в реальное, прежде чем использовать его в формуле, график получился гладким, как и должно быть. Почему при подключении к формуле должно иметь значение, является ли iT
вещественным или целым числом? Мой компилятор g77.
РЕДАКТИРОВАТЬ: Формула дает некоторые неточные значения для iT
<<code>ic8t.