Implementation of Intrinsic
types in f18¶
Intrinsic types are integer, real, complex, character, and logical. All intrinsic types have a kind type parameter called KIND, which determines the representation method for the specified type. The intrinsic type character also has a length type parameter called LEN, which determines the length of the character string.
The implementation of CHARACTER
type in f18 is described
in Character.md.
Supported TYPES and KINDS¶
Here are the type and kind combinations supported in f18:
INTEGER(KIND=1) 8-bit two’s-complement integerINTEGER(KIND=2) 16-bit two’s-complement integerINTEGER(KIND=4) 32-bit two’s-complement integerINTEGER(KIND=8) 64-bit two’s-complement integerINTEGER(KIND=16) 128-bit two’s-complement integer
REAL(KIND=2) 16-bit IEEE 754 binary16 (5e11m)REAL(KIND=3) 16-bit upper half of 32-bit IEEE 754 binary32 (8e8m)REAL(KIND=4) 32-bit IEEE 754 binary32 (8e24m)REAL(KIND=8) 64-bit IEEE 754 binary64 (11e53m)REAL(KIND=10) 80-bit extended precision with explicit normalization bit (15e64m)REAL(KIND=16) 128-bit IEEE 754 binary128 (15e113m)
COMPLEX(KIND=2) Two 16-bit IEEE 754 binary16COMPLEX(KIND=3) Two 16-bit upper half of 32-bit IEEE 754 binary32COMPLEX(KIND=4) Two 32-bit IEEE 754 binary32COMPLEX(KIND=8) Two 64-bit IEEE 754 binary64COMPLEX(KIND=10) Two 80-bit extended precisions valuesCOMPLEX(KIND=16) Two 128-bit IEEE 754 binary128
No double-double quad precision type is supported.
LOGICAL(KIND=1) 8-bit integerLOGICAL(KIND=2) 16-bit integerLOGICAL(KIND=4) 32-bit integerLOGICAL(KIND=8) 64-bit integer
No 128-bit logical support.
Defaults kinds¶
INTEGER 4REAL 4COMPLEX 4DOUBLE PRECISION 8LOGICAL 4
Modifying the default kind with default-real-8.¶
REAL 8DOUBLE PRECISION 8COMPLEX 8
Modifying the default kind with default-integer-8:¶
INTEGER 8
There is no option to modify the default logical kind.
Modules compiled with different default-real and default-integer kinds may be freely mixed. Module files encode the kind value for every entity.
Representation of LOGICAL variables¶
The default logical is LOGICAL(KIND=4)
.
Logical literal constants with kind 1, 2, 4, and 8 share the following characteristics:.TRUE. is represented as 1_kind.FALSE. is represented as 0_kind
Tests for true is integer value is not zero.
The implementation matches gfortran.
Programs should not use integer values in LOGICAL contexts or use LOGICAL values to interface with other languages.
Representations of LOGICAL variables in other compilers¶
Intel ifort / NVIDA nvfortran / PGI pgf90¶
.TRUE. is represented as -1_kind.FALSE. is represented as 0_kindAny other values result in undefined behavior.
Values with a low-bit set are treated as .TRUE..Values with a low-bit clear are treated as .FALSE..