Random mod算子在大整数上的应用

Random mod算子在大整数上的应用,random,integer,fortran,long-integer,Random,Integer,Fortran,Long Integer,我在我的fortran代码中生成了大整数,它们被用作我正在使用的随机数函数的种子。问题是我有几个,我注意到有时生成的数字太大,只得到了2147483647,据我所知,这是fortran中整数的8位数限制 我想解决这个问题,用这个极限来计算我的数字。我如何做到这一点 只需使用较大的整数类 integer, parameter :: ip = selected_int_kind(number_of_digits_you_need) integer(ip) :: var !all the intege

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


我想解决这个问题,用这个极限来计算我的数字。我如何做到这一点

只需使用较大的整数类

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

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

大多数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

当然,您需要的
number\u Of digits\u
实际上应该是
number\u Of digits\u您需要的\u在\u编译器的\u限制\u之内。当然,任意写入
所选的\u int\u kind(85)
(例如)不能保证提供一个包含85位小数的整数。但将来可能会有这样的编译器。38是一个在某些系统上工作的值。