[Haskell-beginners] Antw.: Question about CFloat and Float

Alberto Ruiz aruiz at um.es
Fri Apr 29 14:20:47 CEST 2011


On 04/29/2011 08:20 AM, ch.gosch at googlemail.com wrote:
> Hi Alberto,
> thanks for the hint and the link. Do you have any information on whether
> that will continue to work in the future? I somehow have a bad feeling
> about it because the C* versions of the types would then be unnecessary.

I don't have this information, but I find it very convenient that Float 
and Double are the standard IEEE 754 floating types. I hope this is not 
changed any time soon... :)

http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers

Alberto

> Thanks again,
> Christian
>
> ----- Reply message -----
> Von: "Alberto Ruiz" <aruiz at um.es>
> An: "C Gosch" <ch.gosch at googlemail.com>
> Cc: <beginners at haskell.org>
> Betreff: [Haskell-beginners] Question about CFloat and Float
> Datum: Do., Apr. 28, 2011 15:27
>
>
> Hi Christian,
>
> On 04/28/2011 02:27 PM, C Gosch wrote:
>  > Dear list members,
>  > I have the following problem: I have wrapped a C library using the FFI
>  > and c2hs.
>  > The C functions all take a bunch of pointers to C arrays of floats,
>  > doubles, or ints as arguments.
>  > Naturally, the Haskell representation of these is e.g.
>  > Ptr CFloat
>  > or, for single values, CFloat.
>  > My question is: if I have an array, e.g. allocated with mallocArray, to
>  > Haskell Float values (Ptr Float),
>  > is the representation of Float exactly the same as for CFloat? Can I
>  > safely use Ptr Float where the C function
>  > expects the C type float* ?
>  > I assume that I can not, and in that case I would like to find a way to
>  > have Float on the Haskell side and CFloat on the C side.
>  > Any hint on how I would do that without copying data and without too
>  > large performance penalties?
>  >
>  > Thanks a lot,
>  > Christian
>  >
>
> I think that in ghc you can assume the same representation for CFloat
> and CDouble, they are newtypes of Float and Double:
>
> http://www.haskell.org/ghc/docs/7.0.3/html/libraries/base-4.3.1.0/Foreign-C-Types.html#g:4
>
> (I directly use arrays of Float and Double with C libraries without any
> problem). But Int may be different from CInt depending on the
> architecture, so we need explicit conversions.
>
> Alberto




More information about the Beginners mailing list