cyclotomic-0.2: A subfield of the complex numbers for exact calculation

Data.Complex.Cyclotomic

Description

The cyclotomic numbers are a subset of the complex numbers with the following properties:

1. The cyclotomic numbers are represented exactly, enabling exact computations and equality comparisons.
2. The cyclotomic numbers contain the Gaussian rationals (complex numbers of the form `p` + `q` `i` with `p` and `q` rational). As a consequence, the cyclotomic numbers are a dense subset of the complex numbers.
3. The cyclotomic numbers contain the square roots of all rational numbers.
4. The cyclotomic numbers form a field: they are closed under addition, subtraction, multiplication, and division.
5. The cyclotomic numbers contain the sine and cosine of all rational multiples of pi.
6. The cyclotomic numbers can be thought of as the rational field extended with `n`th roots of unity for arbitrarily large integers `n`.

Floating point numbers do not do well with equality comparison:

```(sqrt 2 + sqrt 3)^2 == 5 + 2 * sqrt 6
-> False
```

Data.Complex.Cyclotomic represents these numbers exactly, allowing equality comparison:

```(sqrtRat 2 + sqrtRat 3)^2 == 5 + 2 * sqrtRat 6
-> True
```

`Cyclotomic`s can be exported as inexact complex numbers using the `toComplex` function:

```e 6
-> -e(3)^2
real \$ e 6
-> 1/2
imag \$ e 6
-> -1/2*e(12)^7 + 1/2*e(12)^11
imag (e 6) == sqrtRat 3 / 2
-> True
toComplex \$ e 6
-> 0.5000000000000003 :+ 0.8660254037844384
```

The algorithms for cyclotomic numbers are adapted from code by Martin Schoenert and Thomas Breuer in the GAP project http://www.gap-system.org/ (in particular source files gap4r4/src/cyclotom.c and gap4r4/lib/cyclotom.gi).

Synopsis

Documentation

data Cyclotomic Source

A cyclotomic number.

Instances

 Eq Cyclotomic Fractional Cyclotomic Num Cyclotomic `signum c` is the complex number with magnitude 1 that has the same argument as c; `signum c = c / abs c`. Show Cyclotomic

The square root of -1.

The primitive `n`th root of unity. For example, `e(4) = i` is the primitive 4th root of unity, and `e`(5) = exp(2*pi*i/5) is the primitive 5th root of unity. In general, `e` `n` = exp(2*pi*i/`n`).

The square root of an `Integer`.

The square root of a `Rational` number.

Sine function with argument in degrees.

Cosine function with argument in degrees.

Make a Gaussian rational; `gaussianRat p q` is the same as `p + q * i`.

A complex number in polar form, with rational magnitude `r` and rational angle `s` of the form `r * exp(2*pi*i*s)`; `polarRat r s` is the same as `r * e q ^ p`, where `s = p/q`.

Complex conjugate.

Real part of the cyclotomic number.

Imaginary part of the cyclotomic number.

Modulus squared.

Is the cyclotomic a real number?

Is the cyclotomic a rational?

Is the cyclotomic a Gaussian rational?

Export as an inexact complex number.

Export as an inexact real number if possible.

Return an exact rational number if possible.