idontgetoutmuch / random

Random number library
Other
3 stars 2 forks source link

Floating point range: new formula, special case a == b #169

Closed curiousleo closed 4 years ago

curiousleo commented 4 years ago

Context: https://github.com/haskell/random/pull/62/files#r439693384 (@Bodigrim).

Before:

$ stack bench random:bench --ba '--small --match pattern Float'
pure/random/Float                        mean 28.82 μs  ( +- 1.865 μs  )
pure/uniformR/unbounded/Float            mean 28.67 μs  ( +- 1.443 μs  )
pure/uniformR/floating/IO/uniformFloat01M mean 28.22 μs  ( +- 609.7 ns  )
pure/uniformR/floating/IO/uniformFloatPositive01M mean 32.64 μs  ( +- 3.938 μs  )
pure/uniformR/floating/St/uniformFloat01M mean 61.45 μs  ( +- 5.318 μs  )
pure/uniformR/floating/St/uniformFloatPositive01M mean 60.94 μs  ( +- 5.621 μs  )
pure/uniformR/floating/pure/uniformFloat01M mean 29.48 μs  ( +- 2.765 μs  )
pure/uniformR/floating/pure/uniformFloatPositive01M mean 28.54 μs  ( +- 844.5 ns  )

After:

$ stack bench random:bench --ba '--small --match pattern Float'
pure/random/Float                        mean 28.94 μs  ( +- 1.332 μs  )
pure/uniformR/unbounded/Float            mean 31.43 μs  ( +- 3.454 μs  )
pure/uniformR/floating/IO/uniformFloat01M mean 31.26 μs  ( +- 2.921 μs  )
pure/uniformR/floating/IO/uniformFloatPositive01M mean 28.23 μs  ( +- 1.441 μs  )
pure/uniformR/floating/St/uniformFloat01M mean 62.20 μs  ( +- 6.332 μs  )
pure/uniformR/floating/St/uniformFloatPositive01M mean 57.13 μs  ( +- 2.214 μs  )
pure/uniformR/floating/pure/uniformFloat01M mean 32.09 μs  ( +- 3.215 μs  )
pure/uniformR/floating/pure/uniformFloatPositive01M mean 32.14 μs  ( +- 3.269 μs  )