Restore exact old semantics of `decodeFloat`
authorHerbert Valerio Riedel <hvr@gnu.org>
Wed, 19 Nov 2014 10:09:33 +0000 (11:09 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Wed, 19 Nov 2014 10:37:07 +0000 (11:37 +0100)
commite2af452cd533778c5447719c59429d72bb1fe00d
tree5b8961b0a7ad233f861d160f2830067c399619cd
parent42244668af6d8c1dd6a2d64af90ed57d8ecd8d88
Restore exact old semantics of `decodeFloat`

`integer-gmp2` uses the new 64bit-based IEEE deconstructing primop
introduced in b62bd5ecf3be421778e4835010b6b334e95c5a56.

However, the returned values differ for exceptional IEEE values:

Previous (expected) semantics:

  > decodeFloat (-1/0)
  (-4503599627370496,972)

  > decodeFloat (1/0)
  (4503599627370496,972)

  > decodeFloat (0/0)
  (-6755399441055744,972)

Currently (broken) semantics:

  > decodeFloat (-1/0 :: Double)
  (-9223372036854775808,-53)

  > decodeFloat (1/0 :: Double)
  (-9223372036854775808,-53)

  > decodeFloat (0/0 :: Double)
  (-9223372036854775808,-53)

This patch reverts to the old expected semantics.

I plan to revisit the implementation during GHC 7.11 development.

This should address #9810

Reviewed By: austin, ekmett, luite

Differential Revision: https://phabricator.haskell.org/D486
rts/StgPrimFloat.c
testsuite/.gitignore
testsuite/tests/numeric/should_run/T9810.hs [new file with mode: 0644]
testsuite/tests/numeric/should_run/T9810.stdout [new file with mode: 0644]
testsuite/tests/numeric/should_run/all.T