Question
Answer and Explanation
The maximum value of an integer in Fortran is not a single, fixed number because it depends on the specific kind of integer being used. Fortran supports various kinds of integers, each with a different range. Here's a breakdown:
1. Default INTEGER Kind:
- If you declare an integer simply as INTEGER
without specifying the kind, Fortran uses a default integer kind. This is typically a 32-bit integer on many modern systems. The maximum positive value for a 32-bit signed integer is 231 - 1, which is 2147483647. However, the default integer size can vary by compiler and platform, so it's best not to assume 32 bits always.
2. Explicitly Specified INTEGER Kinds:
- Fortran allows you to explicitly define the kind of integer using the KIND
parameter. Common kinds include:
- `INTEGER(KIND=1)`: Usually, this is a 1-byte (8-bit) integer. The maximum positive value would be 27 - 1 = 127.
- `INTEGER(KIND=2)`: Typically, this is a 2-byte (16-bit) integer. The maximum positive value would be 215 - 1 = 32767.
- `INTEGER(KIND=4)`: Commonly a 4-byte (32-bit) integer, having a max value of 2147483647, same as default integer on many systems.
- `INTEGER(KIND=8)`: Often an 8-byte (64-bit) integer. The maximum positive value would be 263 - 1 = 9223372036854775807.
3. Using the SELECTED_INT_KIND
Intrinsic Function:
- To choose an integer kind with the necessary range, use the SELECTED_INT_KIND(r)
function, where 'r' is the number of decimal digits you need. This ensures portability across platforms. For instance:
integer, parameter :: int_kind = selected_int_kind(9)
integer(kind=int_kind) :: my_integer
- The above code asks for an integer with at least 9 decimal digits and assigns it to `int_kind`.
4. Finding the Maximum Value at Runtime:
- You can determine the maximum value of an integer kind at runtime using the HUGE
intrinsic function. For example, to find the maximum value for a specific integer kind 'k':
integer, parameter :: k = selected_int_kind(9)
integer(kind=k) :: large_integer
print , huge(large_integer)
In summary, the maximum value of an integer in Fortran is not fixed. It depends on the kind of integer, and you should use the SELECTED_INT_KIND
function and HUGE
intrinsic to ensure that your code works correctly and portably across platforms. You should choose a kind that suits the number range you need to represent, avoiding overflow problems.