Node: Complex Intrinsic, Next: Conjg Intrinsic, Previous: Cmplx Intrinsic, Up: Table of Intrinsic Functions

Complex(Real,Imag)

Complex: `COMPLEX`

function, the exact type being the result of cross-promoting the
types of all the arguments.

`Real`: `INTEGER`

or `REAL`

; scalar; INTENT(IN).

`Imag`: `INTEGER`

or `REAL`

; scalar; INTENT(IN).

Intrinsic groups: `gnu`

.

Description:

Returns a `COMPLEX`

value that has `Real`

and `Imag`

as its
real and imaginary parts, respectively.

If `Real` and `Imag` are the same type, and that type is not
`INTEGER`

, no data conversion is performed, and the type of
the resulting value has the same kind value as the types
of `Real` and `Imag`.

If `Real` and `Imag` are not the same type, the usual type-promotion
rules are applied to both, converting either or both to the
appropriate `REAL`

type.
The type of the resulting value has the same kind value as the
type to which both `Real` and `Imag` were converted, in this case.

If `Real` and `Imag` are both `INTEGER`

, they are both converted
to `REAL(KIND=1)`

, and the result of the `COMPLEX()`

invocation is type `COMPLEX(KIND=1)`

.

*Note:* The way to do this in standard Fortran 90
is too hairy to describe here, but it is important to
note that `CMPLX(D1,D2)`

returns a `COMPLEX(KIND=1)`

result even if `D1`

and `D2`

are type `REAL(KIND=2)`

.
Hence the availability of `COMPLEX()`

in GNU Fortran.