The CMPLX function uses REAL or INTEGER arguments to compose a result of type COMPLEX. It may also convert between different kinds of COMPLEX numbers, possibly resulting in a loss of precision.

## Syntax

CMPLX (x[,y] [,kind] )

*x* is an INTENT(IN) scalar or array of type REAL, INTEGER, or COMPLEX.

*y* is INTENT(IN) and of type REAL or INTEGER. If *x* is of type COMPLEX,
*y* cannot be present.

*kind* is a number which determines the kind of the result. It must be a
scalar INTEGER expression that can be evaluated at compile time. To maintain portability,
this argument should be the result of a KIND Function,
or SELECTED_REAL_KIND Function.

The result is of type COMPLEX.

If *x* is INTEGER or REAL, the value of the result is the complex number
whose real part has the value of *x*, and whose imaginary part has the value
of *y*. If *y* is absent, the imaginary part of the result is zero.

If *x* is COMPLEX, it is as if *x* and *y* were present with
the values REAL(*x*), AIMAG(*x*)).

If *kind* is present, the result is of the kind specified by *kind*.

If *kind* is absent, the result is default kind.

## Example

real :: x=1.,y=1. integer :: ix=1,iy=1 complex(kind(1.d0)) :: z=(1.d0,1.d0) write(*,*) cmplx(x) ! y assumed to be zero write(*,*) cmplx(x,y) write(*,*) cmplx(ix,iy,kind(1.d0)) write(*,*) cmplx(ix,y) write(*,*) z, cmplx(z) ! precision is lost