[Python-Dev] [Python-checkins] r51525 - in python/trunk: Lib/test/test_float.py Objects/floatobject.c

Thomas Wouters thomas at python.org
Thu Aug 24 00:29:21 CEST 2006


Since Alex isn't on python-dev, forwarding this for his convenience (he said
he wanted to reply.) Tim also replied to his checkin, but I didn't forward
that message.

---------- Forwarded message ----------
From: Thomas Wouters <thomas at python.org>
Date: Aug 24, 2006 12:16 AM
Subject: Re: [Python-checkins] r51525 - in python/trunk:
Lib/test/test_float.py Objects/floatobject.c
To: "alex. martelli" <python-checkins at python.org>



On 8/23/06, alex.martelli <python-checkins at python.org> wrote:
>
>
> --- python/trunk/Objects/floatobject.c  (original)
> +++ python/trunk/Objects/floatobject.c  Wed Aug 23 22:42:02 2006
> @@ -821,12 +821,12 @@
>         ix = pow(iv, iw);
>         PyFPE_END_PROTECT(ix)
>         Py_ADJUST_ERANGE1(ix);
> -       if (errno != 0) {
> +        /* we need to ignore ERANGE here and just return inf */
> +       if (errno != 0 && errno != ERANGE) {
>                 /* We don't expect any errno value other than ERANGE, but
>                  * the range of libm bugs appears unbounded.
>                  */
> -               PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError :
> -                                                    PyExc_ValueError);
> +               PyErr_SetFromErrno(PyExc_ValueError);
>                 return NULL;


I don't think this can be right. The returnvalue of pow() in the case of
ERANGE isn't defined anywhere that I can find, at least. How can we assume
it is +Infinity? As I tried to say over the visiphone, you can't even use
compile-time or startup-time checks for the behaviour because 'undefined'
also means it need not be consistent, either. The best we could do, if we
really wanted to return +inf instead of raising OverflowError (which I
don't, but don't really care about either), is generate +Infinity in some
guaranteed way. I'm sure Tim can come up with a convenient, portable way <
0.9 wink>.

But I'd prefer to keep it the way it was: x*x and x**2 don't always do the
same thing. Floats have a lot more confusing features like that, such as
10*x - 9*x need not be x. I don't see the added value of trying to make it
consistent in just this case, even if it's portable.

-- 
Thomas Wouters <thomas at python.org>

Hi! I'm a .signature virus! copy me into your .signature file to help me
spread!


-- 
Thomas Wouters <thomas at python.org>

Hi! I'm a .signature virus! copy me into your .signature file to help me
spread!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-dev/attachments/20060824/5949f7c3/attachment.html 


More information about the Python-Dev mailing list