#3676: realToFrac doesn't sanely convert between floating types
---------------------------------+------------------------------------------
    Reporter:  draconx           |       Owner:                   
        Type:  bug               |      Status:  new              
    Priority:  normal            |   Component:  libraries (other)
     Version:  6.10.4            |    Keywords:                   
          Os:  Unknown/Multiple  |    Testcase:                   
Architecture:  x86_64 (amd64)    |     Failure:  None/Unknown     
---------------------------------+------------------------------------------
 As far as I can tell, the only way to convert between floating types in
 Haskell is to use realToFrac.  Unfortunately, this function does some
 insane mangling of values when converting.  Some examples:

 realToFrac (0/0 :: Double) :: Double
   --> -Infinity
 realToFrac (-1/0 :: Float) :: Double
   --> -3.402823669209385e38
 realToFrac (-0 :: Double) :: CDouble
   --> 0.0

 The last item illustrates an important point:  it is impossible to convert
 a value from Double to CDouble without potentially changing it.  This
 makes it difficult or impossible to use the FFI to call any functions with
 floating point parameters/return values.

 Using a combination of unsafeCoerce (to shoehorn Double values in/out of
 CDoubles) and some functions written in C (to perform float<=>double), I
 was able to work around these problems, but that hardly seems like a nice
 solution.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3676>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to