Previous: , Up: Scalars   [Contents][Index]

#### 6.2.2.4 Complex Numbers

Complex numbers consist of two parts, called the real part and the imaginary part. A complex number that has no imaginary part is called a real number; A complex number that has no real part is called an imaginary number. Any imaginary number can be written as the product of a real number and the imaginary unit. The imaginary unit is generally denoted `i` in mathematical notation and `j` in engineering texts, and is available in LUX as read-only variable `#i`, and as suffix `i` or `I` on any non-imaginary number: `2*#i` and `2i` are two ways of expressing twice the imaginary unit. The imaginary unit is defined such that `#i^2 = -1`.

Complex numbers come in two data types: complex float (`cfloat`), and complex double (`cdouble`). `cdouble` is explicitly indicated by use of the `D` specifier (for `double`) and the `I` specifier (for imaginary).

Complex numbers have no natural ordering, so there is no obvious way to decide whether a complex number `x` is less than or greater than another complex number `y`. If `x = a + b*#i` and `y = c + d*#i` where `a, b, c, d` are real (non-complex) numbers, then we adopt the rule that `x > y` if ```a + b > c + d```, and `x < y` if `a + b < c + d`. With that rule, the ordering of `cfloat` or `cdouble` numbers with their imaginary part equal to 0 (i.e., so-called purely imaginary numbers) is the same as the ordering of the corresponding `float` or `double` numbers (e.g., `1+0i GT -2+0i`, just like ```1 GT -2```), and the ordering of complex numbers with their real part equal to 0 is similar to that of real numbers (e.g., ```1i GT -2i```).

However, any such rule can lead to somewhat unusual results. For real (non-complex) numbers, if both `x LT y` and `x GT y` are false, then `x EQ y` must be true, and vice versa. For complex numbers, that relationship does not necessarily hold anymore. For example, with the above rule, `x LT y` and `x GT y` and `x EQ y` are all false if `x = 3+2i` and `y = 8-3i`, because 3+2 is equal to 8-3. So, even though `x` is not less than `y`, and `x` is not greater than `y`, yet `x` is not equal to `y`.

The abovementioned ordering rule for complex numbers is used by the binary relational operators `lt`, `le`, `gt`, `ge`, and also by the binary bounding operators `>`, `<`.

See also: #i, abs, real, imaginary, conjugate, fft, Binary Relationals, Binary Bounding

Previous: , Up: Scalars   [Contents][Index]