-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Approximate discrete values and numbers -- -- This package provides approximate discrete values and numbers. @package approximate @version 0.3 module Data.Approximate.Type -- | An approximate number, with a likely interval, an expected value and a -- lower bound on the log of probability that the answer falls -- in the interval. -- -- NB: The probabilities associated with confidence are stored in -- the log domain. data Approximate a Approximate :: {-# UNPACK #-} !(Log Double) -> a -> Approximate a class HasApproximate c_aq5z a_alY7 | c_aq5z -> a_alY7 where confidence = (.) approximate confidence estimate = (.) approximate estimate hi = (.) approximate hi lo = (.) approximate lo approximate :: HasApproximate c_aq5z a_alY7 => Lens' c_aq5z (Approximate a_alY7) confidence :: HasApproximate c_aq5z a_alY7 => Lens' c_aq5z (Log Double) estimate :: HasApproximate c_aq5z a_alY7 => Lens' c_aq5z a_alY7 hi :: HasApproximate c_aq5z a_alY7 => Lens' c_aq5z a_alY7 lo :: HasApproximate c_aq5z a_alY7 => Lens' c_aq5z a_alY7 exact :: Eq a => Prism' (Approximate a) a zero :: (Num a, Eq a) => Prism' (Approximate a) () one :: (Num a, Eq a) => Prism' (Approximate a) () withMin :: Ord a => a -> Approximate a -> Approximate a withMax :: Ord a => a -> Approximate a -> Approximate a instance Data.Approximate.Type.HasApproximate (Data.Approximate.Type.Approximate a0) a0 instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Data.Approximate.Type.Approximate a) instance Data.Serialize.Serialize a => Data.Serialize.Serialize (Data.Approximate.Type.Approximate a) instance Data.Serialize.Serialize a => Data.SafeCopy.SafeCopy.SafeCopy (Data.Approximate.Type.Approximate a) instance Data.Hashable.Class.Hashable a => Data.Hashable.Class.Hashable (Data.Approximate.Type.Approximate a) instance Data.Hashable.Class.Hashable1 Data.Approximate.Type.Approximate instance Data.Bytes.Serial.Serial a => Data.Bytes.Serial.Serial (Data.Approximate.Type.Approximate a) instance Data.Bytes.Serial.Serial1 Data.Approximate.Type.Approximate instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Unboxed.Base.Unbox (Data.Approximate.Type.Approximate a) instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector (Data.Approximate.Type.Approximate a) instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector (Data.Approximate.Type.Approximate a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Approximate.Type.Approximate a) instance GHC.Base.Functor Data.Approximate.Type.Approximate instance Data.Foldable.Foldable Data.Approximate.Type.Approximate instance Data.Traversable.Traversable Data.Approximate.Type.Approximate instance Data.Copointed.Copointed Data.Approximate.Type.Approximate instance Data.Pointed.Pointed Data.Approximate.Type.Approximate instance Data.Functor.Bind.Class.Apply Data.Approximate.Type.Approximate instance GHC.Base.Applicative Data.Approximate.Type.Approximate instance (GHC.Classes.Ord a, GHC.Num.Num a) => GHC.Num.Num (Data.Approximate.Type.Approximate a) instance GHC.Generics.Generic (Data.Approximate.Type.Approximate a) instance Data.Data.Data a => Data.Data.Data (Data.Approximate.Type.Approximate a) instance GHC.Read.Read a => GHC.Read.Read (Data.Approximate.Type.Approximate a) instance GHC.Show.Show a => GHC.Show.Show (Data.Approximate.Type.Approximate a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Approximate.Type.Approximate a) -- | These functions provide wildly inaccurate but very fast approximations -- to common transcendental functions. -- -- The algorithms here are based on Martin Ankerl's optimized -- pow, -- http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/ -- which is in turn based on -- http://nic.schraudolph.org/pubs/Schraudolph99.pdf module Data.Approximate.Numerics class Floating a => Fast a -- | Calculate an approximate log. flog :: Fast a => a -> a flog_lb :: Fast a => a -> a flog_ub :: Fast a => a -> a -- | Calculate an approximate exp. fexp :: Fast a => a -> a fexp_lb :: Fast a => a -> a fexp_ub :: Fast a => a -> a -- | Calculate an approximate pow. fpow :: Fast a => a -> a -> a fpow_lb :: Fast a => a -> a -> a fpow_ub :: Fast a => a -> a -> a -- | Borchardt’s Algorithm from “Dead Reckoning: Calculating without -- instruments”. -- -- This is a remarkably bad approximate logarithm. -- -- flog had better outperform it! It is provided merely for -- comparison. blog :: Floating a => a -> a instance Data.Approximate.Numerics.Fast GHC.Types.Float instance Data.Approximate.Numerics.Fast GHC.Types.Double module Data.Approximate.Mass -- | A quantity with a lower-bound on its probability mass. This represents -- a 'probable value' as a Monad that you can use to calculate -- progressively less likely consequences. -- -- NB: These probabilities are all stored in the log domain. This -- enables us to retain accuracy despite very long multiplication chains. -- We never add these probabilities so the additional overhead of working -- in the log domain is never incurred, except on transitioning in and -- out. -- -- This is most useful for discrete types, such as small Integral -- instances or a Bounded Enum like Bool. -- -- Also note that (&?) and (|?) are -- able to use knowledge about the function to get better precision on -- their results than naively using liftA2 -- (&&) data Mass a Mass :: {-# UNPACK #-} !(Log Double) -> a -> Mass a -- | Calculate the logical or of two booleans with confidence -- lower bounds. (|?) :: Mass Bool -> Mass Bool -> Mass Bool infixr 2 |? -- | Calculate the logical and of two booleans with confidence -- lower bounds. (&?) :: Mass Bool -> Mass Bool -> Mass Bool infixr 3 &? -- | Calculate the exclusive or of two booleans with confidence -- lower bounds. (^?) :: Mass Bool -> Mass Bool -> Mass Bool infixl 6 ^? instance GHC.Generics.Generic (Data.Approximate.Mass.Mass a) instance Data.Data.Data a => Data.Data.Data (Data.Approximate.Mass.Mass a) instance GHC.Read.Read a => GHC.Read.Read (Data.Approximate.Mass.Mass a) instance GHC.Show.Show a => GHC.Show.Show (Data.Approximate.Mass.Mass a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Approximate.Mass.Mass a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Approximate.Mass.Mass a) instance Data.Binary.Class.Binary a => Data.Binary.Class.Binary (Data.Approximate.Mass.Mass a) instance Data.Serialize.Serialize a => Data.Serialize.Serialize (Data.Approximate.Mass.Mass a) instance Data.Serialize.Serialize a => Data.SafeCopy.SafeCopy.SafeCopy (Data.Approximate.Mass.Mass a) instance Data.Hashable.Class.Hashable a => Data.Hashable.Class.Hashable (Data.Approximate.Mass.Mass a) instance Data.Hashable.Class.Hashable1 Data.Approximate.Mass.Mass instance Data.Bytes.Serial.Serial1 Data.Approximate.Mass.Mass instance Data.Bytes.Serial.Serial a => Data.Bytes.Serial.Serial (Data.Approximate.Mass.Mass a) instance GHC.Base.Functor Data.Approximate.Mass.Mass instance Data.Foldable.Foldable Data.Approximate.Mass.Mass instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Generic.Mutable.Base.MVector Data.Vector.Unboxed.Base.MVector (Data.Approximate.Mass.Mass a) instance Data.Vector.Unboxed.Base.Unbox a => Data.Vector.Generic.Base.Vector Data.Vector.Unboxed.Base.Vector (Data.Approximate.Mass.Mass a) instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Approximate.Mass.Mass a) instance Data.Traversable.Traversable Data.Approximate.Mass.Mass instance Data.Functor.Bind.Class.Apply Data.Approximate.Mass.Mass instance Data.Pointed.Pointed Data.Approximate.Mass.Mass instance Data.Copointed.Copointed Data.Approximate.Mass.Mass instance GHC.Base.Applicative Data.Approximate.Mass.Mass instance GHC.Base.Monoid a => GHC.Base.Monoid (Data.Approximate.Mass.Mass a) instance Data.Semigroup.Semigroup a => Data.Semigroup.Semigroup (Data.Approximate.Mass.Mass a) instance Data.Functor.Bind.Class.Bind Data.Approximate.Mass.Mass instance GHC.Base.Monad Data.Approximate.Mass.Mass instance Data.Functor.Extend.Extend Data.Approximate.Mass.Mass instance Control.Comonad.Comonad Data.Approximate.Mass.Mass instance Control.Comonad.ComonadApply Data.Approximate.Mass.Mass module Data.Approximate