Mark Dickinson wrote: > Any suggestions about how to achieve the above-described state of > affairs are welcome!
I have worked out a suggestion in three parts. Part 1 ------ The PyFloat C API gets two more functions: int PyFloat_SetIEEE754(int new_state) -> old state int PyFloat_GetIEEE754(void) -> current state By default the state is 0 which means no IEEE 754 return values for 1./0., 0./0. and maybe some other places. An op like 1./0. raises an exception. With state 1 float ops like f/0. returns copysign(INF, f) and for f=0. it returns a NaN. ints and longs aren't affected by the state. The state is to be stored and fetched from Python's thread state object. This could slow down floats a bit because every time f/0. occurs the state has to be looked up in the thread state object. Part 2 ------ The two function are exposed to Python code as math.set_ieee754 and math.get_ieee754. As an alternative the functions could be added to a new module ieee754 or to the float type. Part 3 ------ contextlib gets a new context for ieee754 class ieee754(object): def __init__(self, state=1): self.new_state = state def __enter__(self): self.old_state = math.set_ieee754(self.new_state) def __exit__(self, *args): math.set_ieee754(self.old_state) usage: with contextlib.ieee754(): ... Christian -- http://mail.python.org/mailman/listinfo/python-list