Little explanation

Scott David Daniels Scott.Daniels at Acm.Org
Tue Mar 2 16:00:28 CET 2004


Angelo Secchi wrote:

> Hi,
> few days ago I had a problem of converting floating from an IBM/370
> system to the actual standard. Thanks to a couple of you (Anton and
> Howard) I got the code to solve the problem that as expected works fine.
> I (a newbie not only with Python but also with programming) tried to
> understand the code by myself but finally I decided to bother the list
> again for a couple of explanations. First here the code I'm referring
> to:
> 
> def ibm370tofloat(fourbytes):
>     i = struct.unpack('>I',fourbytes)[0]
>     sign = [1,-1][bool(i & 0x100000000L)]
>     characteristic = ((i >> 24) & 0x7f) - 64
>     fraction = (i & 0xffffff)/float(0x1000000L)
>     return sign*16**characteristic*fraction

This could also have been done as:

     def ibm370(fourbytes):
         first = ord(fourbytes[0])
         fraction = struct.unpack('>I', chr(0)+fourbytes[1:]) * 2. ** -24
         if first > 127: fraction = -fraction #or sign =[1,-1][first>127]
         characteristic = (first & 0x7F) - 64
         return fraction * 16 ** characteristic

Clearer?
-- 
-Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list