The type **complex** includes all mathematical complex numbers other than those included in the type **rational**. *Complexes* are

expressed in Cartesian form with a real part and an imaginary part, each of which is a *real*. The real part and imaginary part are either both *rational* or both of the same *float* *type*. The imaginary part can be a *float* zero, but can never be a *rational* zero, for such a number is always represented by Common Lisp as a *rational* rather than a *complex*.

Specializing.

Every element of this *type* is a *complex* whose real part and imaginary part are each of type `(upgraded-complex-part-type `

.
*typespec*)

This *type* encompasses those *complexes* that can result by giving numbers of *type* *typespec* to **complex**.

`(complex `

refers to all *type-specifier*)]]*complexes* that can result from giving *numbers* of *type* *type-specifier* to the function **complex**, plus all other *complexes* of the same specialized representation.

- {\secref\RuleOfCanonRepForComplexRationals}
- {\secref\NumsFromTokens}, {\secref\PrintingComplexes}

The input syntax for a *complex* with real part

and imaginary part *r*

is *i*`#C(`

. For further details, see section {\secref\StandardMacroChars}.
*r* *i*)

For every *float*, `n`

, there is a *complex* which represents the same mathematical number and which can be obtained by **(COERCE ''n'' 'COMPLEX)**.

\issue{ARRAY-TYPE-ELEMENT-TYPE-SEMANTICS:UNIFY-UPGRADING} \issue{ARRAY-TYPE-ELEMENT-TYPE-SEMANTICS:UNIFY-UPGRADING}