【问题标题】:Applying mod operator on large integer对大整数应用 mod 运算符
【发布时间】:2014-03-13 15:14:25
【问题描述】:

我在我的 fortran 代码中生成大整数,用作我正在使用的随机数函数的种子。问题是我有几个这样的,我注意到有时生成的数字太大而只是得到2147483647,据我了解,这是fortran中整数的8位限制。

我想通过使用我的号码的 mod 来解决这个问题。我如何实现这一目标?

【问题讨论】:

    标签: random integer fortran long-integer


    【解决方案1】:

    大多数 Fortran 编译器提供 64 位整数,这将提供至少 18 个十进制数字。 (Fortran 2008 要求支持 64 位整数。)您可以通过以下方式选择:

    integer, parameter :: VeryLongInt_K = selected_int_kind (18)
    integer (kind=VeryLongInt_K) :: variable
    

    或者您可以使用 ISO_FORTRAN_ENVint64 类型来选择 64 位整数:

    use, intrinsic :: ISO_FORTRAN_ENV
    integer (int64) :: variable
    

    【讨论】:

      【解决方案2】:

      只需使用较大的整数类型。

      integer, parameter :: ip = selected_int_kind(number_of_digits_you_need)
      integer(ip) :: var !all the integer variables that need to be large
      

      整数可以有更大的值,mod 函数将生成相同类型的结果。

      【讨论】:

      • 当然number_of_digits_you_need 应该是number_of_digits_you_need_within_the_limits_of_the_compiler。随意写selected_int_kind(85)(例如)不能保证传递一个85位小数的整数。
      • 当然。但是将来可能会有这种类型的编译器。 38 是可以预期在某些系统上工作的值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多