【发布时间】:2014-03-13 15:14:25
【问题描述】:
我在我的 fortran 代码中生成大整数,用作我正在使用的随机数函数的种子。问题是我有几个这样的,我注意到有时生成的数字太大而只是得到2147483647,据我了解,这是fortran中整数的8位限制。
我想通过使用我的号码的 mod 来解决这个问题。我如何实现这一目标?
【问题讨论】:
标签: random integer fortran long-integer
我在我的 fortran 代码中生成大整数,用作我正在使用的随机数函数的种子。问题是我有几个这样的,我注意到有时生成的数字太大而只是得到2147483647,据我了解,这是fortran中整数的8位限制。
我想通过使用我的号码的 mod 来解决这个问题。我如何实现这一目标?
【问题讨论】:
标签: random integer fortran long-integer
大多数 Fortran 编译器提供 64 位整数,这将提供至少 18 个十进制数字。 (Fortran 2008 要求支持 64 位整数。)您可以通过以下方式选择:
integer, parameter :: VeryLongInt_K = selected_int_kind (18)
integer (kind=VeryLongInt_K) :: variable
或者您可以使用 ISO_FORTRAN_ENV 和 int64 类型来选择 64 位整数:
use, intrinsic :: ISO_FORTRAN_ENV
integer (int64) :: variable
【讨论】:
只需使用较大的整数类型。
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位小数的整数。