Copyright  (c) Scott N. Walck 20122017 

License  GPL3 (see LICENSE) 
Maintainer  Scott N. Walck <walck@lvc.edu> 
Stability  experimental 
Safe Haskell  Trustworthy 
Language  Haskell2010 
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
 sinRev :: Rational > Cyclotomic
 cosRev :: Rational > Cyclotomic
 gaussianRat :: Rational > Rational > Cyclotomic
 polarRat :: Rational > Rational > Cyclotomic
 polarRatDeg :: Rational > Rational > Cyclotomic
 polarRatRev :: Rational > Rational > Cyclotomic
 conj :: Cyclotomic > Cyclotomic
 real :: Cyclotomic > Cyclotomic
 imag :: Cyclotomic > Cyclotomic
 isReal :: Cyclotomic > Bool
 isRat :: Cyclotomic > Bool
 isGaussianRat :: Cyclotomic > Bool
 toComplex :: RealFloat a => Cyclotomic > Complex a
 toReal :: RealFloat a => Cyclotomic > Maybe a
 toRat :: Cyclotomic > Maybe Rational
 goldenRatio :: Cyclotomic
 dft :: [Cyclotomic] > [Cyclotomic]
 dftInv :: [Cyclotomic] > [Cyclotomic]
 rootsQuadEq :: Rational > Rational > Rational > Maybe (Cyclotomic, Cyclotomic)
 heron :: Rational > Rational > Rational > Cyclotomic
Documentation
data Cyclotomic Source #
A cyclotomic number.
Eq Cyclotomic Source #  
Fractional Cyclotomic Source #  
Num Cyclotomic Source # 

Show Cyclotomic Source #  
i :: Cyclotomic Source #
The square root of 1.
e :: Integer > Cyclotomic Source #
sqrtInteger :: Integer > Cyclotomic Source #
The square root of an Integer
.
sinDeg :: Rational > Cyclotomic Source #
Sine function with argument in degrees.
cosDeg :: Rational > Cyclotomic Source #
Cosine function with argument in degrees.
sinRev :: Rational > Cyclotomic Source #
Sine function with argument in revolutions.
cosRev :: Rational > Cyclotomic Source #
Cosine function with argument in revolutions.
gaussianRat :: Rational > Rational > Cyclotomic Source #
Make a Gaussian rational; gaussianRat p q
is the same as p + q * i
.
:: Rational  magnitude 
> Rational  angle, in revolutions 
> Cyclotomic  cyclotomic number 
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
. This function is the same as polarRatRev
.
:: Rational  magnitude 
> Rational  angle, in degrees 
> Cyclotomic  cyclotomic number 
A complex number in polar form, with rational magnitude and rational angle in degrees.
:: Rational  magnitude 
> Rational  angle, in revolutions 
> Cyclotomic  cyclotomic number 
A complex number in polar form, with rational magnitude and rational angle in revolutions.
conj :: Cyclotomic > Cyclotomic Source #
Complex conjugate.
real :: Cyclotomic > Cyclotomic Source #
Real part of the cyclotomic number.
imag :: Cyclotomic > Cyclotomic Source #
Imaginary part of the cyclotomic number.
isReal :: Cyclotomic > Bool Source #
Is the cyclotomic a real number?
isRat :: Cyclotomic > Bool Source #
Is the cyclotomic a rational?
isGaussianRat :: Cyclotomic > Bool Source #
Is the cyclotomic a Gaussian rational?
toReal :: RealFloat a => Cyclotomic > Maybe a Source #
Export as an inexact real number if possible.
goldenRatio :: Cyclotomic Source #
The golden ratio, (1 + √5)/2
.
dft :: [Cyclotomic] > [Cyclotomic] Source #
Discrete Fourier transform,
X_k = sum_{n=0}^{N1} x_n cdot e^{i 2 pi frac{k}{N} n}
.
dftInv :: [Cyclotomic] > [Cyclotomic] Source #
Inverse discrete Fourier transform,
x_n = frac{1}{N} sum_{k=0}^{N1} X_k cdot e^{i 2 pi frac{k}{N} n}
.
:: Rational  a 
> Rational  b 
> Rational  c 
> Maybe (Cyclotomic, Cyclotomic)  roots 
Solutions to the quadratic equation
a x^2 + b x + c = 0.
Returns Nothing
if a == 0.