Next: MIL-STD 1753, Previous: REAL() and AIMAG() of Complex, Up: Functions and Subroutines
CMPLX()
of DOUBLE PRECISION
In accordance with Fortran 90 and at least some (perhaps all)
other compilers, the GNU Fortran language defines CMPLX()
as always returning a result that is type COMPLEX(KIND=1)
.
This means `CMPLX(D1,D2)', where `D1' and `D2'
are REAL(KIND=2)
(DOUBLE PRECISION
), is treated as:
CMPLX(SNGL(D1), SNGL(D2))
(It was necessary for Fortran 90 to specify this behavior
for DOUBLE PRECISION
arguments, since that is
the behavior mandated by FORTRAN 77.)
The GNU Fortran language also provides the DCMPLX()
intrinsic,
which is provided by some FORTRAN 77 compilers to construct
a DOUBLE COMPLEX
entity from of DOUBLE PRECISION
operands.
However, this solution does not scale well when more COMPLEX
types
(having various precisions and ranges) are offered by Fortran implementations.
Fortran 90 extends the CMPLX()
intrinsic by adding
an extra argument used to specify the desired kind of complex
result.
However, this solution is somewhat awkward to use, and
g77 currently does not support it.
The GNU Fortran language provides a simple way to build a complex value out of two numbers, with the precise type of the value determined by the types of the two numbers (via the usual type-promotion mechanism):
COMPLEX(real, imag)
When real and imag are the same REAL
types, COMPLEX()
performs no conversion other than to put them together to form a
complex result of the same (complex version of real) type.
See Complex Intrinsic, for more information.