Safe Haskell | None |
---|---|
Language | Haskell2010 |
Field classes
Synopsis
- class (Distributive a, Subtractive a, Divisive a) => Field a
- class Field a => ExpField a where
- logBase :: ExpField a => a -> a -> a
- sqrt :: ExpField a => a -> a
- class (Field a, Multiplicative b, Additive b) => QuotientField a b where
- properFraction :: a -> (b, a)
- round :: (Ord a, Ord b, QuotientField a b, Subtractive b, Integral b) => a -> b
- ceiling :: (Ord a, QuotientField a b) => a -> b
- floor :: (Ord a, QuotientField a b, Subtractive b) => a -> b
- truncate :: (Ord a, QuotientField a b, Subtractive b) => a -> b
- infinity :: Field a => a
- negInfinity :: Field a => a
- nan :: Field a => a
- class Field a => TrigField a where
- half :: Field a => a
Documentation
class (Distributive a, Subtractive a, Divisive a) => Field a Source #
A Field is a set on which addition, subtraction, multiplication, and division are defined. It is also assumed that multiplication is distributive over addition.
A summary of the rules inherited from super-classes of Field. Floating point computation is a terrible, messy business and, in practice, only rough approximation can be achieve for association and distribution.
zero + a == a a + zero == a ((a + b) + c) (a + (b + c)) a + b == b + a a - a == zero negate a == zero - a negate a + a == zero a + negate a == zero one * a == a a * one == a ((a * b) * c) == (a * (b * c)) (a * (b + c)) == (a * b + a * c) ((a + b) * c) == (a * c + b * c) a * zero == zero zero * a == zero a / a == one || a == zero recip a == one / a || a == zero recip a * a == one || a == zero a * recip a == one || a == zero
Instances
Field Double Source # | |
Defined in NumHask.Algebra.Field | |
Field Float Source # | |
Defined in NumHask.Algebra.Field | |
Field a => Field (Complex a) Source # | |
Defined in NumHask.Data.Complex | |
(Ord a, Signed a, Integral a, Ring a) => Field (Ratio a) Source # | |
Defined in NumHask.Data.Rational | |
Field b => Field (a -> b) Source # | |
Defined in NumHask.Algebra.Field |
class Field a => ExpField a where Source #
A hyperbolic field class
sqrt . (**2) == id log . exp == id for +ive b, a != 0,1: a ** logBase a b ≈ b
class (Field a, Multiplicative b, Additive b) => QuotientField a b where Source #
Conversion from a Field
to a Ring
a - one < floor a <= a <= ceiling a < a + one round a == floor (a + half)
properFraction :: a -> (b, a) Source #
Instances
QuotientField Double Int Source # | |
Defined in NumHask.Algebra.Field | |
QuotientField Double Integer Source # | |
Defined in NumHask.Algebra.Field | |
QuotientField Float Int Source # | |
Defined in NumHask.Algebra.Field | |
QuotientField Float Integer Source # | |
Defined in NumHask.Algebra.Field | |
(Ord a, Signed a, Integral a, Ring a, Signed b, FromIntegral b a) => QuotientField (Ratio a) b Source # | |
Defined in NumHask.Data.Rational properFraction :: Ratio a -> (b, Ratio a) Source # | |
QuotientField b c => QuotientField (a -> b) (a -> c) Source # | |
Defined in NumHask.Algebra.Field properFraction :: (a -> b) -> (a -> c, a -> b) Source # |
round :: (Ord a, Ord b, QuotientField a b, Subtractive b, Integral b) => a -> b Source #
round to the nearest integral
Exact ties are managed by rounding down ties if the whole component is even.
>>>
round (1.5 :: Double) :: Int
2
>>>
round (2.5 :: Double) :: Int
2
ceiling :: (Ord a, QuotientField a b) => a -> b Source #
supply the next upper whole component
>>>
ceiling (1.001 :: Double) :: Int
2
floor :: (Ord a, QuotientField a b, Subtractive b) => a -> b Source #
supply the previous lower whole component
>>>
floor (1.001 :: Double) :: Int
1
truncate :: (Ord a, QuotientField a b, Subtractive b) => a -> b Source #
supply the whole component closest to zero
>>>
floor (-1.001 :: Double) :: Int
-2
>>>
truncate (-1.001 :: Double) :: Int
-1
infinity :: Field a => a Source #
A field introduces the concept of infinity.
one / zero + infinity == infinity infinity + a == infinity zero / zero != nan
Note the tricky law that, although nan is assigned to zero/zero, they are never-the-less not equal. A committee decided this.
negInfinity :: Field a => a Source #
negative infinity
class Field a => TrigField a where Source #
Trigonometric Field