I'm trying to put some values into a struct. Some of these values are NaN
and Inf due to the nature of the data. As you well may know, struct (and
other things) in Python <= 2.4 doesn't support inf and nan float values.
You get the dreaded "SystemErro r: frexp() result out of range" error.
Before I go and write my own little wrapper, has anyone out there written
an "extended" struct that supports the inf and nan values? I know this is
fixed in 2.5, but using that isn't an option at this point, as users will
be running older versions of python.
I suppose I could get the relevant source from the 2.5 source and compile it
as a custom package, but that wouldn't be very transparent for my users,
and would probably be getting in way over my head. :)
Ideas? Suggestions?
j
--
Joshua Kugler
Lead System Admin -- Senior Programmer http://www.eeinternet.com
PGP Key: http://pgp.mit.edu/ Â*ID 0xDB26D7CE 4 2459
On Sep 19, 9:58 pm, "Joshua J. Kugler" <jos...@eeinter net.comwrote:
I'm trying to put some values into a struct. Some of these values are NaN
and Inf due to the nature of the data. As you well may know, struct (and
other things) in Python <= 2.4 doesn't support inf and nan float values.
You get the dreaded "SystemErro r: frexp() result out of range" error.
Before I go and write my own little wrapper, has anyone out there written
an "extended" struct that supports the inf and nan values? I know this is
fixed in 2.5, but using that isn't an option at this point, as users will
be running older versions of python.
I suppose I could get the relevant source from the 2.5 source and compile it
as a custom package, but that wouldn't be very transparent for my users,
and would probably be getting in way over my head. :)
Ideas? Suggestions?
Here's a wrapped pack:
import struct
pack_double_wor karound = {
'inf': struct.pack('Q' , 0x7ff0000000000 000L),
'-inf': struct.pack('Q' , 0xfff0000000000 000L),
'nan': struct.pack('Q' , 0x7ff8000000000 000L)
}
def pack_one_safe(f , a):
if f == 'd' and str(f) in pack_double_wor karound:
return pack_double_wor karound[str(f)]
return struct.pack(f, a)
def pack(fmt, *args):
return ''.join(pack_on e_safe(f, a) for f, a in zip(fmt, args))
Unpacking is similar: unpack doubles with 'Q' and test the
long for equality with +-inf, and find nan's by checking bits
52 to 62. If the number's ok, unpack again using 'd'.
You can get python values for nan, -inf and inf by using
float('nan'), float('-inf'), float('inf').
I've not been able to properly test this, as struct seems
to work fine in Python 2.3 and 2.4 on MacOS X.
HTH
--
Paul Hankin
Both str(f) should be str(a) in pack_one_safe.
--
Paul Hankin
On Thursday 20 September 2007 11:19, Paul Hankin wrote:
>I suppose I could get the relevant source from the 2.5 source and compile it as a custom package, but that wouldn't be very transparent for my users, and would probably be getting in way over my head. :)
Ideas? Suggestions?
Here's a wrapped pack:
import struct
pack_double_wor karound = {
'inf': struct.pack('Q' , 0x7ff0000000000 000L),
'-inf': struct.pack('Q' , 0xfff0000000000 000L),
'nan': struct.pack('Q' , 0x7ff8000000000 000L)
}
def pack_one_safe(f , a):
if f == 'd' and str(f) in pack_double_wor karound:
return pack_double_wor karound[str(f)]
return struct.pack(f, a)
def pack(fmt, *args):
return ''.join(pack_on e_safe(f, a) for f, a in zip(fmt, args))
Unpacking is similar: unpack doubles with 'Q' and test the
long for equality with +-inf, and find nan's by checking bits
52 to 62. If the number's ok, unpack again using 'd'.
You can get python values for nan, -inf and inf by using
float('nan'), float('-inf'), float('inf').
I've not been able to properly test this, as struct seems
to work fine in Python 2.3 and 2.4 on MacOS X.
Thanks for the ideas, Paul! I came up with something that works for me, but
this has a few ideas that I'm going to implement in my wrapper to make for
cleaner code.
As to testing it on MacOS X: yeah, it can be a somewhat system-dependent
problem, so may not show up on all architectures.
Thanks for the tips!
j
--
Joshua Kugler
Lead System Admin -- Senior Programmer http://www.eeinternet.com
PGP Key: http://pgp.mit.edu/ Â*ID 0xDB26D7CE
On 2007-09-20, Joshua J. Kugler <jo****@eeinter net.comwrote:
>import struct
pack_double_wo rkaround = { 'inf': struct.pack('Q' , 0x7ff0000000000 000L), '-inf': struct.pack('Q' , 0xfff0000000000 000L), 'nan': struct.pack('Q' , 0x7ff8000000000 000L) }
def pack_one_safe(f , a): if f == 'd' and str(f) in pack_double_wor karound: return pack_double_wor karound[str(f)] return struct.pack(f, a)
def pack(fmt, *args): return ''.join(pack_on e_safe(f, a) for f, a in zip(fmt, args))
NB: the strings returned by str() when passed a NaN or Inf are
system dependent and aren't guaranteed to be consistent from
one day to the next unless you've overridden the floating point
object's __repr__ method to make sure.
>Unpacking is similar: unpack doubles with 'Q' and test the long for equality with +-inf, and find nan's by checking bits 52 to 62. If the number's ok, unpack again using 'd'.
Here are the tests I use for 32-bit work:
def isNaN(u):
return ((u & 0x7f800000) == 0x7f800000) and (u & 0x7fffff)
def isInf(u):
return ((u & 0x7f800000) == 0x7f800000) and ((u & 0x7fffff)==0)
def isNeg(u):
return (u & 0x80000000)
>You can get python values for nan, -inf and inf by using float('nan') , float('-inf'), float('inf').
I've not been able to properly test this, as struct seems to work fine in Python 2.3 and 2.4 on MacOS X.
Thanks for the ideas, Paul! I came up with something that
works for me, but this has a few ideas that I'm going to
implement in my wrapper to make for cleaner code.
As to testing it on MacOS X: yeah, it can be a somewhat
system-dependent problem,
It shouldn't be, but unfortunately it is. If you're careful,
you can come up with something that's fairly portable (I've got
a wrapped pickle/unpickle that's nan/inf aware and works on
both Win32 and Linux. Holler if you want it.
Thanks for the tips!
--
Grant Edwards grante Yow! I Know A Joke!!
at
visi.com This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Cgacc20 |
last post by:
I have a c struct from old code that cannot be modified and I am trying to
write a wrapper C++ class around it.
This class is often passed as a pointer to some c functions of a library and I
wanted to keep my new class transparent and compatible with those functions.
That is, when using the code, I should be able to do either:
oldVector xyz;
function( &xyz );
myVector xyz;
function( &xyz );
|
by: Dave |
last post by:
would someone please be so kind as to explain:
|
by: seia0106 |
last post by:
Hello,
Writing a program in c++ that should use complex numbers I have two
choices before me.
1- define a struct for complex data i.e
struct {float real,imag;
}ComplexNum;
2-use an array of float type
|
by: James Harris |
last post by:
Having updated my Debian system it now complains that I am using
an incompatible pointer type in warnings such as "passing arg 2
of 'bind' from incompatible pointer type" from code,
struct sockaddr_in sockad1;
....
retval = bind (sock1, &sockad1, sockad1len);
I can coerce the pointer with
|
by: a |
last post by:
I have a struct to write to a file
struct _structA{
long x;
int y;
float z;
}
struct _structA A;
//file open
write(fd,A,sizeof(_structA));
//file close
| |
by: Tor Aadnevik |
last post by:
Hi,
I'm trying to call a win32 function using pinvoke and C# .Net.
The function takes a struct reference as a parameter (lpInfo), but on return
the struct is not filled with data, and I'm suspecting that I have made a
mistake mapping up the struct.
|
by: stromhau |
last post by:
Hi,
I have made a few classes in c++. They somehow cooperate doing some 3d stuff.
Basically it is a moving camera acting as a flight, i have placed a lot of objects around the scene together with a b-spline surfcae.
The problem class is the polygon class. this class read 3d files generates faces, edges and so on.
here are two of the building blocks(structs)
struct FACE{
|
by: cr55 |
last post by:
I was wondering if anyone can help me with this programming code as i keep getting errors and am not sure how to fix them. The error code displayed now is error: C2228: left of '.rent' must have class/struct/union type.The problem area is underlined. Any help will be greatly appreciated.
#include <c:\cpp\input.h>
#include < time.h>
#define SIZE 20
struct Cust{
int custno;
char fname;
|
by: gdarian216 |
last post by:
can I pass grades.projects in my function call that is void get_scores(ifstream& infile, int num_scores, grades.projects)
and the function would look like
void get_scores(ifstream& infile, int num_scores, records& grades)
{
in_file >> grades.name;
for (int i = 0; i < num_scores; i++)
{
in_file >> records grades;
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |