comp.lang.ada
 help / color / mirror / Atom feed
From: Damien <damien.carbonne@free.fr>
Subject: Re: How to byte swap an IEEE Float?
Date: Wed, 29 Jun 2005 22:10:57 +0200
Date: 2005-06-29T22:11:00+02:00	[thread overview]
Message-ID: <42c30054$0$27313$626a14ce@news.free.fr> (raw)
In-Reply-To: <1119966822.201891.303810@g49g2000cwa.googlegroups.com>

Bj�rn a �crit :
> I need to read some float values from file that have been written in
> big-endian byte order from a c-program. The simple swapping procedure
> that I have just interchanges the byte order of type IEEE_Float_32 to
> get little-endian. The problem is that for some values (eg. 33.229000)
> it is a "NaN" when doing IEEE_Float_32'Read and I get a constraint
> error (invalid data) from stream_io when the value is read. How do I
> get around this?
> 
I had to deal with byte swapping for floats and doubles between Intel 
and PPC. This was C++ and I discovered that swapping had to be done in a 
neutral form (byte array) before interpretation to float or double. 
Initialy I directly swapped floats and doubles, and for certain values 
some bits were changed.
So a function with such a signature should never be defined:
function Swap (X : Float) return Float;
It seems that all bit patterns can not be legal floats. I interpreted 
this as a normalisation of the float, but this is not sure at all.

So, to swap a float or a double X, do this :
1) convert X to a byte array Y (right size)
2) swap Y from host 1 format to network or archive format
3) send Y
4) read Y
5) swap Y from network or archive format to host 2 format
6) convert Y to X

I don't know if this is related to your problem, but it seems similar, 
and it may help.
It was C++, but those issues are language independent.

Damien Carbonne



  parent reply	other threads:[~2005-06-29 20:10 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-28 13:53 How to byte swap an IEEE Float? Björn
2005-06-28 15:06 ` Marius Amado Alves
2005-06-28 15:55   ` Simon Wright
2005-06-28 16:59     ` Marius Amado Alves
2005-06-28 20:43       ` Björn
2005-06-29  0:13         ` Marius Amado Alves
2005-06-30 19:14         ` Randy Brukardt
2005-06-28 16:05 ` Martin Dowie
2005-06-28 23:35 ` Stephen Leake
2005-06-29 10:00   ` Björn
2005-06-30  0:52     ` Stephen Leake
2005-07-01  4:51       ` Simon Wright
2005-06-29 20:10 ` Damien [this message]
2005-06-30 11:35   ` Peter Hermann
2005-06-30 22:26     ` Damien
2005-07-01  7:37       ` Peter Hermann
replies disabled

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