module Numeric.Random.Distribution.Uniform where
import Data.Word
uniform32cc :: [Word32]
-> [Double]
uniform32cc :: [Word32] -> [Double]
uniform32cc [Word32]
xs = forall a b. (a -> b) -> [a] -> [b]
map ((forall a. Fractional a => a -> a -> a
/ Double
4294967295.0) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) forall a b. (a -> b) -> a -> b
$ [Word32]
xs
uniform32co :: [Word32]
-> [Double]
uniform32co :: [Word32] -> [Double]
uniform32co [Word32]
xs = forall a b. (a -> b) -> [a] -> [b]
map ((forall a. Fractional a => a -> a -> a
/ Double
4294967296.0) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral) forall a b. (a -> b) -> a -> b
$ [Word32]
xs
uniform32oc :: [Word32]
-> [Double]
uniform32oc :: [Word32] -> [Double]
uniform32oc [Word32]
xs = forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Eq a => a -> a -> Bool
/= Double
0) forall a b. (a -> b) -> a -> b
$ [Word32] -> [Double]
uniform32cc forall a b. (a -> b) -> a -> b
$ [Word32]
xs
uniform32oo :: [Word32]
-> [Double]
uniform32oo :: [Word32] -> [Double]
uniform32oo [Word32]
xs = forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Eq a => a -> a -> Bool
/= Double
1) forall a b. (a -> b) -> a -> b
$ [Word32] -> [Double]
uniform32oc forall a b. (a -> b) -> a -> b
$ [Word32]
xs
uniform53cc :: [Word32]
-> [Double]
uniform53cc :: [Word32] -> [Double]
uniform53cc [Word32]
xs = forall {a} {a}. (Fractional a, Integral a) => [a] -> [a]
uniform' [Word32]
xs
where uniform' :: [a] -> [a]
uniform' (a
u1:a
u2:[a]
us) = (a
a forall a. Num a => a -> a -> a
* a
67108864.0 forall a. Num a => a -> a -> a
+ a
b) forall a. Fractional a => a -> a -> a
/ a
9007199254740991.0 forall a. a -> [a] -> [a]
: [a] -> [a]
uniform' [a]
us
where a :: a
a = forall a b. (Integral a, Num b) => a -> b
fromIntegral a
u1 forall a. Fractional a => a -> a -> a
/ a
32.0
b :: a
b = forall a b. (Integral a, Num b) => a -> b
fromIntegral a
u2 forall a. Fractional a => a -> a -> a
/ a
64.0
uniform' [a]
_ = forall a. HasCallStack => [Char] -> a
error [Char]
"uniform53cc: input list must be infinite"
uniform53co :: [Word32]
-> [Double]
uniform53co :: [Word32] -> [Double]
uniform53co [Word32]
xs = forall {a} {a}. (Fractional a, Integral a) => [a] -> [a]
uniform' forall a b. (a -> b) -> a -> b
$ [Word32]
xs
where uniform' :: [a] -> [a]
uniform' (a
u1:a
u2:[a]
us) = (a
a forall a. Num a => a -> a -> a
* a
67108864.0 forall a. Num a => a -> a -> a
+ a
b) forall a. Fractional a => a -> a -> a
/ a
9007199254740992.0 forall a. a -> [a] -> [a]
: [a] -> [a]
uniform' [a]
us
where a :: a
a = forall a b. (Integral a, Num b) => a -> b
fromIntegral a
u1 forall a. Fractional a => a -> a -> a
/ a
32.0
b :: a
b = forall a b. (Integral a, Num b) => a -> b
fromIntegral a
u2 forall a. Fractional a => a -> a -> a
/ a
64.0
uniform' [a]
_ = forall a. HasCallStack => [Char] -> a
error [Char]
"uniform53co: input list must be infinite"
uniform53oc :: [Word32]
-> [Double]
uniform53oc :: [Word32] -> [Double]
uniform53oc [Word32]
xs = forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Eq a => a -> a -> Bool
/= Double
0) forall a b. (a -> b) -> a -> b
$ [Word32] -> [Double]
uniform53cc forall a b. (a -> b) -> a -> b
$ [Word32]
xs
uniform53oo :: [Word32]
-> [Double]
uniform53oo :: [Word32] -> [Double]
uniform53oo [Word32]
xs = forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Eq a => a -> a -> Bool
/= Double
1) forall a b. (a -> b) -> a -> b
$ [Word32] -> [Double]
uniform53oc forall a b. (a -> b) -> a -> b
$ [Word32]
xs
uniform :: Double
-> Double
-> [Double]
-> [Double]
uniform :: Double -> Double -> [Double] -> [Double]
uniform Double
a Double
b [Double]
us = forall a b. (a -> b) -> [a] -> [b]
map (\Double
u -> (Double
bforall a. Num a => a -> a -> a
-Double
a)forall a. Num a => a -> a -> a
*Double
u forall a. Num a => a -> a -> a
+ Double
a) [Double]
us