如何将真实作为一个特定的KIND?

时间:2015-12-18 17:06:59

标签: casting fortran precision fortran90

我在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.0i的实际值表达式表示为我在执行除法和加法之前选择的正确类型。

如何将1.0投射为rkind

1 个答案:

答案 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._rkindnote .可以更明确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))。