Next: CMPLX() of DOUBLE PRECISION, Previous: Generics and Specifics, Up: Functions and Subroutines

`REAL()`

and `AIMAG()`

of Complex
The GNU Fortran language disallows `REAL(`

`expr``)`

and `AIMAG(`

`expr``)`

,
where `expr` is any `COMPLEX`

type other than `COMPLEX(KIND=1)`

,
except when they are used in the following way:

REAL(REAL(expr)) REAL(AIMAG(expr))

The above forms explicitly specify that the desired effect
is to convert the real or imaginary part of `expr`, which might
be some `REAL`

type other than `REAL(KIND=1)`

,
to type `REAL(KIND=1)`

,
and have that serve as the value of the expression.

The GNU Fortran language offers clearly named intrinsics to extract the real and imaginary parts of a complex entity without any conversion:

REALPART(expr) IMAGPART(expr)

To express the above using typical extended FORTRAN 77,
use the following constructs
(when `expr` is `COMPLEX(KIND=2)`

):

DBLE(expr) DIMAG(expr)

The FORTRAN 77 language offers no way
to explicitly specify the real and imaginary parts of a complex expression of
arbitrary type, apparently as a result of requiring support for
only one `COMPLEX`

type (`COMPLEX(KIND=1)`

).
The concepts of converting an expression to type `REAL(KIND=1)`

and
of extracting the real part of a complex expression were
thus “smooshed” by FORTRAN 77 into a single intrinsic, since
they happened to have the exact same effect in that language
(due to having only one `COMPLEX`

type).

*Note:* When `-ff90` is in effect,
`g77` treats ``REAL( expr)`', where

`COMPLEX`

, as `See Ugly Complex Part Extraction, for more information.