| Copyright | (c) Edward Kmett 2010-2014 |
|---|---|
| License | BSD3 |
| Maintainer | ekmett@gmail.com |
| Stability | experimental |
| Portability | DeriveDataTypeable |
| Safe Haskell | Safe |
| Language | Haskell98 |
Numeric.Interval.Kaucher
Description
"Directed" Interval arithmetic
Synopsis
- data Interval a = I !a !a
- (...) :: a -> a -> Interval a
- interval :: Ord a => a -> a -> Maybe (Interval a)
- whole :: Fractional a => Interval a
- empty :: Fractional a => Interval a
- null :: Ord a => Interval a -> Bool
- singleton :: a -> Interval a
- member :: Ord a => a -> Interval a -> Bool
- notMember :: Ord a => a -> Interval a -> Bool
- elem :: Ord a => a -> Interval a -> Bool
- notElem :: Ord a => a -> Interval a -> Bool
- inf :: Interval a -> a
- sup :: Interval a -> a
- singular :: Ord a => Interval a -> Bool
- width :: Num a => Interval a -> a
- midpoint :: Fractional a => Interval a -> a
- intersection :: (Fractional a, Ord a) => Interval a -> Interval a -> Interval a
- hull :: Ord a => Interval a -> Interval a -> Interval a
- bisect :: Fractional a => Interval a -> (Interval a, Interval a)
- magnitude :: (Num a, Ord a) => Interval a -> a
- mignitude :: (Num a, Ord a) => Interval a -> a
- distance :: (Num a, Ord a) => Interval a -> Interval a -> a
- inflate :: (Num a, Ord a) => a -> Interval a -> Interval a
- deflate :: Fractional a => a -> Interval a -> Interval a
- scale :: Fractional a => a -> Interval a -> Interval a
- symmetric :: Num a => a -> Interval a
- contains :: Ord a => Interval a -> Interval a -> Bool
- isSubsetOf :: Ord a => Interval a -> Interval a -> Bool
- certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool
- (<!) :: Ord a => Interval a -> Interval a -> Bool
- (<=!) :: Ord a => Interval a -> Interval a -> Bool
- (==!) :: Eq a => Interval a -> Interval a -> Bool
- (>=!) :: Ord a => Interval a -> Interval a -> Bool
- (>!) :: Ord a => Interval a -> Interval a -> Bool
- possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool
- (<?) :: Ord a => Interval a -> Interval a -> Bool
- (<=?) :: Ord a => Interval a -> Interval a -> Bool
- (==?) :: Ord a => Interval a -> Interval a -> Bool
- (>=?) :: Ord a => Interval a -> Interval a -> Bool
- (>?) :: Ord a => Interval a -> Interval a -> Bool
- clamp :: Ord a => Interval a -> a -> a
- idouble :: Interval Double -> Interval Double
- ifloat :: Interval Float -> Interval Float
- iquot :: Integral a => Interval a -> Interval a -> Interval a
- irem :: Integral a => Interval a -> Interval a -> Interval a
- idiv :: Integral a => Interval a -> Interval a -> Interval a
- imod :: Integral a => Interval a -> Interval a -> Interval a
Documentation
Constructors
| I !a !a |
Instances
| Monad Interval Source # | |
| Functor Interval Source # | |
| Applicative Interval Source # | |
| Foldable Interval Source # | |
Defined in Numeric.Interval.Kaucher Methods fold :: Monoid m => Interval m -> m foldMap :: Monoid m => (a -> m) -> Interval a -> m foldMap' :: Monoid m => (a -> m) -> Interval a -> m foldr :: (a -> b -> b) -> b -> Interval a -> b foldr' :: (a -> b -> b) -> b -> Interval a -> b foldl :: (b -> a -> b) -> b -> Interval a -> b foldl' :: (b -> a -> b) -> b -> Interval a -> b foldr1 :: (a -> a -> a) -> Interval a -> a foldl1 :: (a -> a -> a) -> Interval a -> a elem :: Eq a => a -> Interval a -> Bool maximum :: Ord a => Interval a -> a minimum :: Ord a => Interval a -> a | |
| Traversable Interval Source # | |
| Distributive Interval Source # | |
Defined in Numeric.Interval.Kaucher | |
| Eq a => Eq (Interval a) Source # | |
| (RealFloat a, Ord a) => Floating (Interval a) Source # | |
Defined in Numeric.Interval.Kaucher Methods exp :: Interval a -> Interval a log :: Interval a -> Interval a sqrt :: Interval a -> Interval a (**) :: Interval a -> Interval a -> Interval a logBase :: Interval a -> Interval a -> Interval a sin :: Interval a -> Interval a cos :: Interval a -> Interval a tan :: Interval a -> Interval a asin :: Interval a -> Interval a acos :: Interval a -> Interval a atan :: Interval a -> Interval a sinh :: Interval a -> Interval a cosh :: Interval a -> Interval a tanh :: Interval a -> Interval a asinh :: Interval a -> Interval a acosh :: Interval a -> Interval a atanh :: Interval a -> Interval a log1p :: Interval a -> Interval a expm1 :: Interval a -> Interval a | |
| (Fractional a, Ord a) => Fractional (Interval a) Source # | |
Defined in Numeric.Interval.Kaucher | |
| Data a => Data (Interval a) Source # | |
Defined in Numeric.Interval.Kaucher Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Interval a -> c (Interval a) gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Interval a) toConstr :: Interval a -> Constr dataTypeOf :: Interval a -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Interval a)) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Interval a)) gmapT :: (forall b. Data b => b -> b) -> Interval a -> Interval a gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Interval a -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Interval a -> r gmapQ :: (forall d. Data d => d -> u) -> Interval a -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> Interval a -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> Interval a -> m (Interval a) gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Interval a -> m (Interval a) gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Interval a -> m (Interval a) | |
| (Num a, Ord a) => Num (Interval a) Source # | |
Defined in Numeric.Interval.Kaucher | |
| Ord a => Ord (Interval a) Source # | |
| Real a => Real (Interval a) Source # |
|
Defined in Numeric.Interval.Kaucher Methods toRational :: Interval a -> Rational | |
| RealFloat a => RealFloat (Interval a) Source # | We have to play some semantic games to make these methods make sense. Most compute with the midpoint of the interval. |
Defined in Numeric.Interval.Kaucher Methods floatRadix :: Interval a -> Integer floatDigits :: Interval a -> Int floatRange :: Interval a -> (Int, Int) decodeFloat :: Interval a -> (Integer, Int) encodeFloat :: Integer -> Int -> Interval a significand :: Interval a -> Interval a scaleFloat :: Int -> Interval a -> Interval a isInfinite :: Interval a -> Bool isDenormalized :: Interval a -> Bool isNegativeZero :: Interval a -> Bool | |
| RealFrac a => RealFrac (Interval a) Source # | |
| Show a => Show (Interval a) Source # | |
| Generic (Interval a) Source # | |
| Ord a => Semigroup (Interval a) Source # |
|
| Generic1 Interval Source # | |
| type Rep (Interval a) Source # | |
Defined in Numeric.Interval.Kaucher type Rep (Interval a) = D1 ('MetaData "Interval" "Numeric.Interval.Kaucher" "intervals-0.9.1-AE5iXUrjxT1B0SIdsbtllo" 'False) (C1 ('MetaCons "I" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a))) | |
| type Rep1 Interval Source # | |
Defined in Numeric.Interval.Kaucher type Rep1 Interval = D1 ('MetaData "Interval" "Numeric.Interval.Kaucher" "intervals-0.9.1-AE5iXUrjxT1B0SIdsbtllo" 'False) (C1 ('MetaCons "I" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) Par1)) | |
whole :: Fractional a => Interval a Source #
The whole real number line
>>>whole-Infinity ... Infinity
null :: Ord a => Interval a -> Bool Source #
negation handles NaN properly
>>>null (1 ... 5)False
>>>null (1 ... 1)False
>>>null emptyTrue
member :: Ord a => a -> Interval a -> Bool Source #
Determine if a point is in the interval.
>>>member 3.2 (1.0 ... 5.0)True
>>>member 5 (1.0 ... 5.0)True
>>>member 1 (1.0 ... 5.0)True
>>>member 8 (1.0 ... 5.0)False
>>>member 5 emptyFalse
notMember :: Ord a => a -> Interval a -> Bool Source #
Determine if a point is not included in the interval
>>>notMember 8 (1.0 ... 5.0)True
>>>notMember 1.4 (1.0 ... 5.0)False
And of course, nothing is a member of the empty interval.
>>>notMember 5 emptyTrue
elem :: Ord a => a -> Interval a -> Bool Source #
Deprecated: Use member instead.
Determine if a point is in the interval.
>>>elem 3.2 (1.0 ... 5.0)True
>>>elem 5 (1.0 ... 5.0)True
>>>elem 1 (1.0 ... 5.0)True
>>>elem 8 (1.0 ... 5.0)False
>>>elem 5 emptyFalse
notElem :: Ord a => a -> Interval a -> Bool Source #
Deprecated: Use notMember instead.
Determine if a point is not included in the interval
>>>notElem 8 (1.0 ... 5.0)True
>>>notElem 1.4 (1.0 ... 5.0)False
And of course, nothing is a member of the empty interval.
>>>notElem 5 emptyTrue
singular :: Ord a => Interval a -> Bool Source #
Is the interval a singleton point? N.B. This is fairly fragile and likely will not hold after even a few operations that only involve singletons
>>>singular (singleton 1)True
>>>singular (1.0 ... 20.0)False
width :: Num a => Interval a -> a Source #
Calculate the width of an interval.
>>>width (1 ... 20)19
>>>width (singleton 1)0
>>>width emptyNaN
midpoint :: Fractional a => Interval a -> a Source #
Nearest point to the midpoint of the interval.
>>>midpoint (10.0 ... 20.0)15.0
>>>midpoint (singleton 5.0)5.0
>>>midpoint emptyNaN
intersection :: (Fractional a, Ord a) => Interval a -> Interval a -> Interval a Source #
Calculate the intersection of two intervals.
>>>intersection (1 ... 10 :: Interval Double) (5 ... 15 :: Interval Double)5.0 ... 10.0
hull :: Ord a => Interval a -> Interval a -> Interval a Source #
Calculate the convex hull of two intervals
>>>hull (0 ... 10 :: Interval Double) (5 ... 15 :: Interval Double)0.0 ... 15.0
>>>hull (15 ... 85 :: Interval Double) (0 ... 10 :: Interval Double)0.0 ... 85.0
>>>hull (10 ... 20 :: Interval Double) (15 ... 0 :: Interval Double)10.0 ... 20.0
bisect :: Fractional a => Interval a -> (Interval a, Interval a) Source #
Bisect an interval at its midpoint.
>>>bisect (10.0 ... 20.0)(10.0 ... 15.0,15.0 ... 20.0)
>>>bisect (singleton 5.0)(5.0 ... 5.0,5.0 ... 5.0)
>>>bisect empty(NaN ... NaN,NaN ... NaN)
magnitude :: (Num a, Ord a) => Interval a -> a Source #
Magnitude
>>>magnitude (1 ... 20)20
>>>magnitude (-20 ... 10)20
>>>magnitude (singleton 5)5
mignitude :: (Num a, Ord a) => Interval a -> a Source #
"mignitude"
>>>mignitude (1 ... 20)1
>>>mignitude (-20 ... 10)0
>>>mignitude (singleton 5)5
>>>mignitude emptyNaN
distance :: (Num a, Ord a) => Interval a -> Interval a -> a Source #
Hausdorff distance between non-empty intervals.
>>>distance (1 ... 7) (6 ... 10)0
>>>distance (1 ... 7) (15 ... 24)8
>>>distance (1 ... 7) (-10 ... -2)3
>>>distance empty (1 ... 1)NaN
inflate :: (Num a, Ord a) => a -> Interval a -> Interval a Source #
Inflate an interval by enlarging it at both ends.
>>>inflate 3 (-1 ... 7)-4 ... 10
>>>inflate (-2) (0 ... 4)2 ... 2
deflate :: Fractional a => a -> Interval a -> Interval a Source #
Deflate an interval by shrinking it from both ends.
>>>deflate 3.0 (-4.0 ... 10.0)-1.0 ... 7.0
>>>deflate 2.0 (-1.0 ... 1.0)1.0 ... -1.0
scale :: Fractional a => a -> Interval a -> Interval a Source #
Scale an interval about its midpoint.
>>>scale 1.1 (-6.0 ... 4.0)-6.5 ... 4.5
>>>scale (-2.0) (-1.0 ... 1.0)2.0 ... -2.0
symmetric :: Num a => a -> Interval a Source #
Construct a symmetric interval.
>>>symmetric 3-3 ... 3
>>>symmetric (-2)2 ... -2
contains :: Ord a => Interval a -> Interval a -> Bool Source #
Check if interval X totally contains interval Y
>>>(20 ... 40 :: Interval Double) `contains` (25 ... 35 :: Interval Double)True
>>>(20 ... 40 :: Interval Double) `contains` (15 ... 35 :: Interval Double)False
isSubsetOf :: Ord a => Interval a -> Interval a -> Bool Source #
Flipped version of contains. Check if interval X a subset of interval Y
>>>(25 ... 35 :: Interval Double) `isSubsetOf` (20 ... 40 :: Interval Double)True
>>>(20 ... 40 :: Interval Double) `isSubsetOf` (15 ... 35 :: Interval Double)False
certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool Source #
For all x in X, y in Y. x op y
(<!) :: Ord a => Interval a -> Interval a -> Bool Source #
For all x in X, y in Y. x < y
>>>(5 ... 10 :: Interval Double) <! (20 ... 30 :: Interval Double)True
>>>(5 ... 10 :: Interval Double) <! (10 ... 30 :: Interval Double)False
>>>(20 ... 30 :: Interval Double) <! (5 ... 10 :: Interval Double)False
(<=!) :: Ord a => Interval a -> Interval a -> Bool Source #
For all x in X, y in Y. x <= y
>>>(5 ... 10 :: Interval Double) <=! (20 ... 30 :: Interval Double)True
>>>(5 ... 10 :: Interval Double) <=! (10 ... 30 :: Interval Double)True
>>>(20 ... 30 :: Interval Double) <=! (5 ... 10 :: Interval Double)False
(==!) :: Eq a => Interval a -> Interval a -> Bool Source #
For all x in X, y in Y. x == y
Only singleton intervals return true
>>>(singleton 5 :: Interval Double) ==! (singleton 5 :: Interval Double)True
>>>(5 ... 10 :: Interval Double) ==! (5 ... 10 :: Interval Double)False
(>=!) :: Ord a => Interval a -> Interval a -> Bool Source #
For all x in X, y in Y. x >= y
>>>(20 ... 40 :: Interval Double) >=! (10 ... 20 :: Interval Double)True
>>>(5 ... 20 :: Interval Double) >=! (15 ... 40 :: Interval Double)False
(>!) :: Ord a => Interval a -> Interval a -> Bool Source #
For all x in X, y in Y. x > y
>>>(20 ... 40 :: Interval Double) >! (10 ... 19 :: Interval Double)True
>>>(5 ... 20 :: Interval Double) >! (15 ... 40 :: Interval Double)False
possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool Source #
Does there exist an x in X, y in Y such that x ?op y
(<?) :: Ord a => Interval a -> Interval a -> Bool Source #
Does there exist an x in X, y in Y such that x ?< y
(<=?) :: Ord a => Interval a -> Interval a -> Bool Source #
Does there exist an x in X, y in Y such that x ?<= y
(==?) :: Ord a => Interval a -> Interval a -> Bool Source #
Does there exist an x in X, y in Y such that x ?== y
(>=?) :: Ord a => Interval a -> Interval a -> Bool Source #
Does there exist an x in X, y in Y such that x ?>= y
(>?) :: Ord a => Interval a -> Interval a -> Bool Source #
Does there exist an x in X, y in Y such that x ?> y
clamp :: Ord a => Interval a -> a -> a Source #
The nearest value to that supplied which is contained in the interval.
idouble :: Interval Double -> Interval Double Source #
id function. Useful for type specification
>>>:t idouble (1 ... 3)idouble (1 ... 3) :: Interval Double
ifloat :: Interval Float -> Interval Float Source #
id function. Useful for type specification
>>>:t ifloat (1 ... 3)ifloat (1 ... 3) :: Interval Float