Fortran整数精确混合

时间:2013-11-02 22:09:45

标签: integer fortran precision

最近,我不得不在代码中增加一些整数变量的精度。现在我混合了整数种类,我想知道它们的基本内容。例如,假设我有这些变量:

integer, parameter    :: idp = selected_int_kind(18) 
integer, parameter    :: isp = selected_int_kind(8) 

integer(isp)       :: a,i
integer(idp)       :: da,di

asignment a=da可以吗?那da=1_isp呢?还是da=da+1? 如果允许循环do di=1,da?或者我必须做do di=1_idp,da

在案件中:

subroutine stackof(b,c)
    integer(isp)       :: b,c
    .....

我可以致电stackof(1_isp,da)

谢谢。

1 个答案:

答案 0 :(得分:0)

  

asignment a = da好吗?

是的,如果da在isp范围内,您可能会收到警告。

  

那么da = 1_isp呢?

是的,见上文。

  

或da = da + 1?

相同。

在大多数情况下,我认为使用da = int(a,kind = idp)这样的显式转换是值得的。 这也将避免编译器发出警告。

  

在循环do di = 1的情况下,允许da?

如果编译器支持长整数作为循环计数器,我猜它可能会有效。但是,我会对此保持谨慎。

  

我可以调用stackof(1_isp,da)

不,类型,种类和等级必须匹配。