[GHC] #9564: Floating point subnormals overrounded on output
GHC
ghc-devs at haskell.org
Wed Sep 10 17:37:38 UTC 2014
#9564: Floating point subnormals overrounded on output
-------------------------------------+-------------------------------------
Reporter: jrp | Owner: simonmar
Type: bug | Status: new
Priority: normal | Milestone:
Component: Runtime | Version: 7.8.3
System | Keywords:
Resolution: | Architecture: x86_64 (amd64)
Operating System: MacOS X | Difficulty: Unknown
Type of failure: Incorrect | Blocked By:
result at runtime | Related Tickets:
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by rwbarton):
These extra digits past the decimal point suggest a degree of precision
that doesn't exist in a Float: for instance 1.4013e-45 is the same Float
as 1.4014e-45. In fact all the numbers 1.0e-45 through 2.0e-45 (and a bit
farther in each direction) round to the same Float, so why not output the
simplest one, 1.0e-45? This is the same logic by which we display the
Float 1/10 as 0.1 and not, say, 0.10000000149 even though the latter is
closer to the true value.
printf's %g is not a format you can round-trip through: by default it
always prints 6 digits (in this case the last digit would be 0 and is
dropped). So it's not a good analogue of `show`. (Also, %g is printing a
double, not a float, but it has the same behavior with 2^-1074^, the
smallest positive double.)
Python has similar behavior to GHC: it doesn't have single-precision
floating point AFAIK, but for doubles, it displays 2^-1074^ as 5e-324,
just like GHC displays 5.0e-324. Arguably we could drop the ".0" part, but
I don't think that's worth changing.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9564#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list