The standard solution (since Fortran 95, so I assume your compiler supports it) is to use the SELECTED_INT_KIND
intrinsic to probe for valid integer kinds (whose values are compiler dependent) and the HUGE
intrinsic.
SELECTED_INT_KIND (R)
returns the kind type parameter of an integer type that represents all integer values n with −10^R < n < 10^R (and returns -1 if no such type exist).
HUGE (K)
returns the largest representable number in integer type of kind K.
For example, on my Mac with an x86_64 processor (gfortran compiler, 64-bit mode), the following program:
print *, selected_int_kind(1)
print *, selected_int_kind(4)
print *, selected_int_kind(8)
print *, selected_int_kind(16)
print *, selected_int_kind(32)
print *, selected_int_kind(64)
print *, huge(0_1)
print *, huge(0_2)
print *, huge(0_4)
print *, huge(0_8)
print *, huge(0_16)
end
outputs:
1
2
4
8
16
-1
127
32767
2147483647
9223372036854775807
170141183460469231731687303715884105727
which tells me that I'd use an integer(kind=8)
for your job.