Copyright | (c) Scott N. Walck 2012-2017 |
---|---|
License | GPL-3 (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.gap-system.org/ (in particular source files gap4r4/src/cyclotom.c and gap4r4/lib/cyclotom.gi).
Synopsis
- 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.
Instances
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}^{N-1} 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}^{N-1} 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.