-- 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