Opened 3 years ago

Closed 3 years ago

#7034 closed bug (fixed)

reading a large double results in zero with ghc-7.4.2

Reported by: maeder Owned by: pcapriotti
Priority: normal Milestone: 7.6.1
Component: Compiler Version: 7.4.2
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case: T7034
Blocked By: Blocking:
Related Tickets: #5692 Differential Revisions:

Description

Prelude> read "1E100000000000000000000" :: Double
Infinity
Prelude> read "1E1000000000000000000000" :: Double
0.0

This was probably introduced by the fix for #5688.
Note that #3897 is still open.

Prelude> 1E1000000000000000000000 :: Double

takes too long and sometimes results in 0.0 or in a memory crash

Change History (4)

comment:1 Changed 3 years ago by maeder

It seems that the exponent is parsed as Int without checking overflow

Prelude> 100000000000000000000 :: Int
1661992960
Prelude> 1000000000000000000000 :: Int
-559939584

comment:2 Changed 3 years ago by pcapriotti

  • difficulty set to Unknown
  • Owner set to pcapriotti

Thanks for the report.

comment:3 Changed 3 years ago by pcapriotti

  • Milestone set to 7.6.1

comment:4 Changed 3 years ago by pcapriotti

  • Resolution set to fixed
  • Status changed from new to closed
  • Test Case set to T7034

Fixed by:

commit 4226bae42fdd666c15190ac2f8784547d3fbad5f
Author: Paolo Capriotti <[email protected]>
Date:   Mon Jul 2 12:54:57 2012 +0100

    Fix parsing of RealFloat with huge exponents (#7034).
    
    Ensure numberToRangedRational returns Nothing immediately if the
    exponent is outside Int range, so that we avoid an integer overflow
    later.

This only covers the failure for read in base.

The failure in the lexer is tracked by #5692.

Note: See TracTickets for help on using tickets.