我在我的fortran代碼中生成大整數,這些大整數用作我正在使用的隨機數函數的種子。問題是我有幾個這樣的問題,並且我注意到有時候生成的數字太大,並且簡單得到2147483647
,據我瞭解,這是fortran中整數的8位數限制。在大整數上應用mod運算符
我想解決這個問題,通過把我的編號與該限制的mod。我如何實現這一目標?
我在我的fortran代碼中生成大整數,這些大整數用作我正在使用的隨機數函數的種子。問題是我有幾個這樣的問題,並且我注意到有時候生成的數字太大,並且簡單得到2147483647
,據我瞭解,這是fortran中整數的8位數限制。在大整數上應用mod運算符
我想解決這個問題,通過把我的編號與該限制的mod。我如何實現這一目標?
只需使用較大的整數類型。
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_of_digits_you_need'應該是'number_of_digits_you_need_within_the_limits_of_the_compiler'。任意寫'selected_int_kind(85)'(例如)不能保證傳遞一個帶有85位十進制數字的整數。 –
當然。但是將來可能會有這樣的編譯器。 38是人們可以期望在某些系統上工作的價值。 –