【发布时间】:2011-09-20 14:28:10
【问题描述】:
我有一个程序循环一个变量并在每一步计算一个值:
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网页文档一致。
标签: fortran fortran90 fortran77 g77