comp.lang.ada
 help / color / mirror / Atom feed
From: "David C. Hoos" <david.c.hoos.sr@ada95.com>
Subject: Re: Little Endian -> Big Endian (Ada95 / GNAT),Whats with floating point types?
Date: Thu, 4 Mar 2004 05:55:20 -0600
Date: 2004-03-04T05:55:20-06:00	[thread overview]
Message-ID: <cNE1c.8325$JN2.5500@bignews4.bellsouth.net> (raw)
In-Reply-To: 4046b474_1@127.0.0.1


<pburnand0-news@yahoo.com> wrote in message news:4046b474_1@127.0.0.1...
> Joachim Schrļæ½er wrote:
>
> > A short question:
> >
> > It's not so simple with floating point types, just swapping bytes, or is
> > it? One has to swap all the bits or?
> > Interfaces.IEEE_Float_32 has 1 bit sign, 23 bit mantissa and 8 bit
> > exponent, Interfaces.IEEE_Float_64 has 1 bit sign, 52 bit mantissa and
11
> > bit exponent when I remember correctly.
> >
> >
> >     Achim
>
> That's not easy because floats are really machine dependant.  That's not a
> simple endianess question.
>
> The universal solution for this is to store your floating point number in
> ASCII in a string and then store the string.  That takes more place, but
> there is no portability problems since in every case, a float converted to
> a string always from left to right.  Then it's even possible to use the
> number using a different format or precision...
>
There's certainly more than one "universal solution."  One supplied by the
compiler manufacturer is likely to be a good one, viz.:

If you use Stream IO to write the data, then you can take advantage of
the solution the GNAT folks created for Distributed Systems (Annex E
of the Ada Language Reference Manual).

This solution is embodied in the glade supplement to gnat.

For example, if you're using gnat-3.15p, the corresponding glade can
be found at ftp://ftp.cs.nyu.edu/pub/gnat/3.15p/glade

Then, replace the file s-stratt.adb in your standard gnat distribution
with the one from the same version of glade, and re-compile and
rebuild the library files (.a), and you have what you want.  Now, as
long as your types are declared the same on both platforms (with no
representation clauses) you will have platform-independence.

I'm not sure why GNAT didn't do this from the beginning -- perhaps because
they didn't provide an implementation of the Distributed Systems Annex at
the beginning.  Also, there is a small performance penalty paid for
shuffling bits around to achieve platform independence.

Hope this helps.




  reply	other threads:[~2004-03-04 11:55 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-25  9:38 Little Endian -> Big Endian (Ada95 / GNAT) James Amor
2004-02-25 12:23 ` David C. Hoos
2004-02-26 15:43   ` James Amor
2004-02-26  5:59 ` Simon Wright
2004-02-27 20:38   ` Guillaume Foliard
2004-02-28 11:27   ` Little Endian -> Big Endian (Ada95 / GNAT), Whats with floating point types? Joachim Schr�er
2004-02-29 16:32     ` Simon Wright
2004-03-04  5:32     ` pburnand0-news
2004-03-04 11:55       ` David C. Hoos [this message]
2004-03-04 13:12         ` Marius Amado Alves
2004-03-04 17:51           ` Warren W. Gay VE3WWG
2004-03-04 18:34             ` Hyman Rosen
2004-03-05 17:40               ` Warren W. Gay VE3WWG
2004-03-05 17:50                 ` Warren W. Gay VE3WWG
2004-03-05 13:48             ` pburnand0-news
2004-03-05 17:34               ` Warren W. Gay VE3WWG
2004-03-05 17:53                 ` Warren W. Gay VE3WWG
2004-03-05 13:29           ` pburnand0-news
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox