Safe Haskell  SafeInfered 

The cyclotomic numbers are a subset of the complex numbers with the following properties:
 The cyclotomic numbers are represented exactly, enabling exact computations and equality comparisons.
 The cyclotomic numbers contain the Gaussian rationals
(complex numbers of the form
p
+q
i
withp
andq
rational). As a consequence, the cyclotomic numbers are a dense subset of the complex numbers.  The cyclotomic numbers contain the square roots of all rational numbers.
 The cyclotomic numbers form a field: they are closed under addition, subtraction, multiplication, and division.
 The cyclotomic numbers contain the sine and cosine of all rational multiples of pi.
 The cyclotomic numbers can be thought of as the rational field extended
with
n
th roots of unity for arbitrarily large integersn
.
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.gapsystem.org/ (in particular source files gap4r4/src/cyclotom.c and gap4r4/lib/cyclotom.gi).
 data Cyclotomic
 i :: Cyclotomic
 e :: Integer > Cyclotomic
 sqrtInteger :: Integer > Cyclotomic
 sqrtRat :: Rational > Cyclotomic
 sinDeg :: Rational > Cyclotomic
 cosDeg :: Rational > Cyclotomic
 gaussianRat :: Rational > Rational > Cyclotomic
 polarRat :: Rational > Rational > Cyclotomic
 conj :: Cyclotomic > Cyclotomic
 real :: Cyclotomic > Cyclotomic
 imag :: Cyclotomic > Cyclotomic
 modSq :: Cyclotomic > Rational
 isReal :: Cyclotomic > Bool
 isRat :: Cyclotomic > Bool
 isGaussianRat :: Cyclotomic > Bool
 toComplex :: Cyclotomic > Complex Double
 toReal :: Cyclotomic > Maybe Double
 toRat :: Cyclotomic > Maybe Rational
Documentation
data Cyclotomic Source
A cyclotomic number.
Eq Cyclotomic  
Fractional Cyclotomic  
Num Cyclotomic 

Show Cyclotomic 
The square root of 1.
e :: Integer > CyclotomicSource
sqrtInteger :: Integer > CyclotomicSource
The square root of an Integer
.
sqrtRat :: Rational > CyclotomicSource
The square root of a Rational
number.
sinDeg :: Rational > CyclotomicSource
Sine function with argument in degrees.
cosDeg :: Rational > CyclotomicSource
Cosine function with argument in degrees.
gaussianRat :: Rational > Rational > CyclotomicSource
Make a Gaussian rational; gaussianRat p q
is the same as p + q * i
.
polarRat :: Rational > Rational > CyclotomicSource
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
.
conj :: Cyclotomic > CyclotomicSource
Complex conjugate.
real :: Cyclotomic > CyclotomicSource
Real part of the cyclotomic number.
imag :: Cyclotomic > CyclotomicSource
Imaginary part of the cyclotomic number.
modSq :: Cyclotomic > RationalSource
Modulus squared.
isReal :: Cyclotomic > BoolSource
Is the cyclotomic a real number?
isRat :: Cyclotomic > BoolSource
Is the cyclotomic a rational?
isGaussianRat :: Cyclotomic > BoolSource
Is the cyclotomic a Gaussian rational?
toComplex :: Cyclotomic > Complex DoubleSource
Export as an inexact complex number.
toReal :: Cyclotomic > Maybe DoubleSource
Export as an inexact real number if possible.
toRat :: Cyclotomic > Maybe RationalSource
Return an exact rational number if possible.