如何将真实投射为特定种类?
How to cast a real as a specific KIND?
我在 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
?
要将数值转换为实数值,可以使用 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
本身是一个内在函数,它 returns 是数字对象的种类值。
不过,还有其他需要注意的地方。
首先,文字常量1._rkind
(里面的.
,用1.0_rkind
可以更清楚),它属于rkind
和值近似 1
.
不过,没有可比较的表达式 i_rkind
,因此对于值接近 i
.
的类型 rkind
的真实结果,上述转换是必要的
就是说,对于您的示例,没有必要对整数值进行此类转换。在 Fortran 的规则下,表达式 1._rkind/i
涉及 i
的隐式转换并等效于 1._rkind/real(i,rkind)
(和 real(1.0, rkind)/real(i,rkind)
)。
我在 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
?
要将数值转换为实数值,可以使用 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
本身是一个内在函数,它 returns 是数字对象的种类值。
不过,还有其他需要注意的地方。
首先,文字常量1._rkind
(.
,用1.0_rkind
可以更清楚),它属于rkind
和值近似 1
.
不过,没有可比较的表达式 i_rkind
,因此对于值接近 i
.
rkind
的真实结果,上述转换是必要的
就是说,对于您的示例,没有必要对整数值进行此类转换。在 Fortran 的规则下,表达式 1._rkind/i
涉及 i
的隐式转换并等效于 1._rkind/real(i,rkind)
(和 real(1.0, rkind)/real(i,rkind)
)。