| Copyright | (c) Edward Kmett 2013-2015 |
|---|---|
| License | BSD3 |
| Maintainer | Edward Kmett <[email protected]> |
| Stability | experimental |
| Portability | non-portable |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Numeric.Log
Description
Documentation
Log-domain Float and Double values.
Instances
sum :: (RealFloat a, Foldable f) => f (Log a) -> Log a Source #
Efficiently and accurately compute the sum of a set of log-domain numbers
While folding with (+) accomplishes the same end, it requires an
additional n-2 logarithms to sum n terms. In addition,
here we introduce fewer opportunities for round-off error.
While for small quantities the naive sum accumulates error,
>>>let xs = Prelude.replicate 40000 (Exp 1e-4) :: [Log Float]>>>Prelude.sum xs ~= 4.00e4True
This sum gives a more accurate result,
>>>Numeric.Log.sum xs ~= 4.00e4True
NB: This does require two passes over the data.