[GHC] #5133: Random instance for Float can generate values out of requested range
GHC
cvs-ghc at haskell.org
Mon May 16 11:51:53 CEST 2011
#5133: Random instance for Float can generate values out of requested range
---------------------------------+------------------------------------------
Reporter: richardsenington | Owner:
Type: bug | Status: new
Priority: normal | Component: libraries/base
Version: 7.1 | Keywords: System.Random
Testcase: | Blockedby:
Os: Linux | Blocking:
Architecture: x86 | Failure: None/Unknown
---------------------------------+------------------------------------------
Comment(by daniel.is.fischer):
Adding a check for a return value of 1.0 and replacing that with 0.0 (so
that all `Float` results are rounded to from approximately the same number
of `Double` results - the round-to-even strategy makes the numbers not
quite identical) doesn't cost much performance, actually I found no
consistently measurable slowdown in my benchmarks.
But I'm not entirely sure that it works reliably,
{{{
case realToFrac y of
x -> x - int2Float (float2Int x)
}}}
failed due to using extended precision (so the result of realToFrac wasn't
really 1.0, float2Int x was 0, result finally rounded to 1 anyway) when
compiled with optimisations but without -msse2.
I don't know whether that can also happen with
{{{
case realToFrac y of
1.0 -> 0.0
x -> x
}}}
It would take someone who knows what's actually going on in the FPU (and
code generator).
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5133#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list