我在Fortran中使用了多种类型,并希望添加一个实数值,其中实数就是这样的。
例如:
program illsum
implicit none
#if defined(USE_SINGLE)
integer, parameter :: rkind = selected_real_kind(6,37)
#elif defined(USE_DOUBLE)
integer, parameter :: rkind = selected_real_kind(15,307)
#elif defined(USE_QUAD)
integer, parameter :: rkind = selected_real_kind(33, 4931)
#endif
integer :: Nmax = 100
integer :: i
real(kind = rkind) :: mysum = 0.0
do i = 1,Nmax
mysum = mysum + kind(rkind, 1.0)/kind(rkind, i)
enddo
end program illsum
所以我想确保1.0
和i
的实际值表达式表示为我在执行除法和加法之前选择的正确类型。
如何将1.0
投射为rkind
?
答案 0 :(得分:3)
要将数值转换为实数值,则存在real
内在函数。此外,这需要第二个参数来确定结果的种类值。因此,对于您的命名常量rkind
real(i, rkind) ! Returns a real valued i of kind rkind
real(1.0, rkind) ! Returns a real valued 1 of kind rkind
我认为kind(rkind, 1.0)
是你的意思。但是,kind
本身是一个返回数值对象的类型值的内在函数。
但是,还有其他事项需要注意。
首先,文字常量1._rkind
(note .
可以更明确1.0_rkind
} rkind
,且近似值1
。
但是,没有可比较的表达式i_rkind
,因此上面的转换对于rkind
的实际结果来说是必要的,其值近似为i
。
那就是说,对于你的例子,没有必要对整数值进行这样的转换。根据Fortran的规则,表达式1._rkind/i
涉及i
的隐式转换,相当于1._rkind/real(i,rkind)
(和real(1.0, rkind)/real(i,rkind)
)。