Browse Source

- Remove obsolete ieee754.py. PEP 754 provides a (proposed) fpconst


			
			main
		
Gregory Warnes 21 years ago
parent
commit
152685b5db
2 changed files with 0 additions and 115 deletions
  1. +0
    -1
      __init__.py
  2. +0
    -114
      ieee754.py

+ 0
- 1
__init__.py View File

@@ -4,6 +4,5 @@
ident = "$Id$" ident = "$Id$"


import WSDLTools import WSDLTools
import ieee754
import XMLname import XMLname



+ 0
- 114
ieee754.py View File

@@ -1,114 +0,0 @@
"""Utilities for handling IEEE 754 floating point special values

This class implements constants and functions for working with IEEE754
double-precision special values. It provides constants for NaN (Not a
Number), NegInf (Negative Infinity), PosInf (Positive Infinity), and
Inf (also Positive Infinity), as well as functions to test for these
values.

The code is implemented in pure python by taking advantage of the
'struct' standard module. Some efficiency could be gained by
translating the core routines into C.

See <http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html>
for a description of the IEEE 754 floating point standard.

Author: Gregory R. Warnes <gregory_r_warnes@groton.pfizer.com>
Date:: 2003-03-25
Version 0.5.0

"""

ident = "$Id$"

__version__ = "0.5.0"

from struct import pack, unpack

# check endianess
_big_endian = pack('i',1)[0] != '\x01'

# and define appropriate constants
if(_big_endian):
HW=0
LW=1
NaN = unpack('d', '\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF')[0]
Inf = unpack('d', '\x7F\xF0\x00\x00\x00\x00\x00\x00')[0]
PosInf = Inf
NegInf = -Inf
else:
HW=1
LW=0

NaN = unpack('d', '\x00\x00\x00\x00\x00\x00\xf8\xff')[0]
Inf = unpack('d', '\x00\x00\x00\x00\x00\x00\xf0\x7f')[0]
PosInf = Inf
NegInf = -Inf

def _double_as_longs(dval):
"Use unpack to decode a double precision float into two long integers"
tmp = unpack('ll',pack('d', dval))
return (tmp[HW], tmp[LW] )


##
## Functions to extract components of the IEEE 754 floating point format
##

def sign(dval):
"Extract the sign bit from a double-precision floating point value"
ll = _double_as_longs(dval)
return ll[0] >> 31 & 0x01

def exponent(dval):
"""Extract the exponentent bits from a double-precision floating
point value.

Note that for normalized values, the exponentdent bits have an offset
of 1023. As a consequence, the actual exponentent is obtained
by subtracting 1023 for the value returned by this function
"""
ll = _double_as_longs(dval)
return ( ll[0] >> 20 ) & 0x7ff

def mantissa(dval):
ll = _double_as_longs(dval)
mantissa1 = ( ll[0] & 0xfffffL ) << 32
mantissa2 = ll[1]
return mantissa1 + mantissa2

##
## Functions to test for IEEE 754 special values
##

def is_NaN(value):
"Determine if the argument is a IEEE 754 NaN (Not a Number) value."
return ( exponent(value)==0x7ff and mantissa(value)!=0 )

def is_Infinite(value):
"""Determine if the argument is an infinite IEEE 754 value (positive
or negative inifinity)"""
return ( exponent(value)==0x7ff and mantissa(value)== 0 )

def is_Finite(value):
"""Determine if the argument is an finite IEEE 754 value (i.e., is
not NaN, positive or negative inifinity)"""
return ( exponent(value)!=0x7ff )


def is_Inf(value):
"Determine if the argument is a IEEE 754 positive infinity value"
return ( sign(value)==0 and exponent(value)==0x7ff \
and mantissa(value)== 0 )

is_PosInf = is_Inf

def is_NegInf(value):
"Determine if the argument is a IEEE 754 negative infinity value"
return ( sign(value)==1 and exponent(value)==0x7ff and \
mantissa(value)== 0 )




Loading…
Cancel
Save