**Class Precedence List:**

**Description:**

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*.

**Compound Type Specifier Kind:**

Specializing.

**Compound Type Specifier Syntax:**

**complex** *[typespec | *]*

**Compound Type Specifier Arguments:**

*typespec*---a *type specifier* that denotes a *subtype* of *type* **real**.

**Compound Type Specifier Description:**

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 `*type-specifier*`)` refers to all *complexes* that can result from giving *numbers* of *type* *type-specifier* to the *function* **complex**, plus all other *complexes* of the same specialized representation.

**See Also:**

Section 12.1.5.3 (Rule of Canonical Representation for Complex Rationals), Section 2.3.2 (Constructing Numbers from Tokens), Section 22.1.3.1.4 (Printing Complexes)

**Notes:**

The input syntax for a *complex* with real part r and imaginary part i is `#C(r i)`. For further details, see Section 2.4 (Standard Macro Characters).

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

The following X3J13 cleanup issue,