module Data.BloomFilter.Calc (
falsePositiveProb,
filterSize,
) where
import Numeric (expm1)
falsePositiveProb ::
Double
-> Double
-> Double
-> Double
falsePositiveProb :: Double -> Double -> Double -> Double
falsePositiveProb Double
n Double
m Double
k =
Double -> Double
forall a. Num a => a -> a
negate (Double -> Double
forall a. Floating a => a -> a
expm1 (Double -> Double
forall a. Num a => a -> a
negate (Double
k Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
n Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
m))) Double -> Double -> Double
forall a. Floating a => a -> a -> a
** Double
k
filterSize ::
Double
-> Double
-> Double
-> Double
filterSize :: Double -> Double -> Double -> Double
filterSize Double
n Double
e Double
k =
Double -> Double
forall a. Num a => a -> a
negate Double
k Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
n Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double -> Double
forall a. Floating a => a -> a
log (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
e Double -> Double -> Double
forall a. Floating a => a -> a -> a
** Double -> Double
forall a. Fractional a => a -> a
recip Double
k)