實與整數i已經哪些循環通過一個可變的,並且在每個步驟計算的值的程序:用Fortran
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
< ic8t
以及。
它看起來像你碰到了與隱式類型轉換的問題 - 什麼是鑄造成的整數,其中它應該是真實的。我嘗試了幾個簡單的例子,用我的g77副本來查看我是否可以重現這一點,但無法 - 嘗試上面的示例代碼將無法編譯,因爲我的g77副本不喜歡fortran 90構造。 –
你的g77如何編譯Fortran 90代碼? g77不僅僅是系統上某種不同編譯器的符號鏈接? –
@Vladimir,我使用'Force'程序,我相信在後端使用g77。看起來編譯器支持一些Fortran 90功能,但不支持其他功能,這與g77網頁文檔一致。 – astay13