[Numpy-discussion] RE: Python 2.2 seriously crippled for numerical computation?
Tim Peters
tim.one at comcast.net
Mon Mar 4 03:41:07 EST 2002
A lot of this speculation should have been cut short by my first msg.
Yes, something changed in 2.2; follow the referenced link:
http://sf.net/tracker/?group_id=5470&atid=105470&func=detail&aid=496104
For the rest of it, it looks like the "1e-200**2 raises OverflowError"
glitch is unique to platforms using glibc. What isn't clear is whether it's
dependent on which version of glibc, or on whether Python is linked
with -lieee, or both.
Unfortunately, the C standard (neither one) isn't a lick of help here --
error reporting from C math functions is a x-platform crapshoot.
Can someone who sees this problem confirm or deny that they link
with -lieee? If they see this problem and don't link with -lieee, also
please try linking with -lieee and see whether the problem goes away then.
On boxes with this problem, I'm also curious what
import math
print math.pow(1e-200, 2.0)
does under 2.1. One probably-relevant thing that changed between 2.1 and
2.2 is that float**int calls the platform pow(float, int) in 2.2. 2.1 did
it with repeated multiplication instead, but screwed up endcases. An
example under 2.1:
>>> x = -1.
>>> import sys
>>> x**(-sys.maxint-1L)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: negative number cannot be raised to a fractional power
>>>
The same thing under 2.2 returns 1.0, provided your platform pow() isn't
braindead. Repeated multiplication is also less accurate than a
decent-quality pow().
More information about the Python-list
mailing list