#### 12.2.2 complex [System Class] ¶

#### Class Precedence List:: ¶

complex, number, t

#### 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:: ¶

[Editorial Note by KMP: If you ask me, this definition is a complete mess. Looking at issue ARRAY-TYPE-ELEMENT-TYPE-SEMANTICS:UNIFY-UPGRADING does not help me figure it out, either. Anyone got any suggestions?]

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:: ¶

Rule of Canonical Representation for Complex Rationals, Constructing Numbers from Tokens, 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 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)`.