2014-03-13 26 views
0

我在我的fortran代碼中生成大整數,這些大整數用作我正在使用的隨機數函數的種子。問題是我有幾個這樣的問題,並且我注意到有時候生成的數字太大,並且簡單得到2147483647,據我瞭解,這是fortran中整數的8位數限制。在大整數上應用mod運算符

我想解決這個問題,通過把我的編號與該限制的mod。我如何實現這一目標?

回答

0

只需使用較大的整數類型。

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

的整數將能有較大的值,並且mod功能將產生同一種結果。

+0

中當然'number_of_digits_you_need'應該是'number_of_digits_you_need_within_the_limits_of_the_compiler'。任意寫'selected_int_kind(85)'(例如)不能保證傳遞一個帶有85位十進制數字的整數。 –

+0

當然。但是將來可能會有這樣的編譯器。 38是人們可以期望在某些系統上工作的價值。 –

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