Some programming languages provide a complex data type for complex number storage and arithmetic as a built-in (primitive) data type.
A complex variable or value is usually represented as a pair of floating-point numbers. Languages that support a complex data type usually provide special syntax for building such values, and extend the basic arithmetic operations ('+', '−', '×', '÷') to act on them. These operations are usually translated by the compiler into a sequence of floating-point machine instructions or into library calls. Those languages may also provide support for other operations, such as formatting, equality testing, etc. As in mathematics, those languages often interpret a floating-point value as equivalent to a complex value with a zero imaginary part.
<complex.h>
complex
<complex>
complex64
complex128
cmath
? (sqrt -1) #C(0 1) ; the result of (sqrt -1)
sin
a + bi
PRINT SQRT(-4) 2i