[Python-Dev] Memory size overflows

Gerald S. Williams gsw@agere.com
Mon, 21 Oct 2002 18:09:29 -0400


Tim Peters wrote:
> Python assumes 2's comp in several places already.

Yeah, I just noticed that.

> I thought you were going to time this <wink>?

I am.

If you assume that, for the vast majority of multiplications, both
multiplicands are in the range -sqrt(sys.maxint):sqrt(sys.maxint),
the following gives a 15% performance improvement for me:

    unsigned long sa = (a < 0L);
    unsigned long sb = (b < 0L);
    unsigned long ua = sa ? -a : a;
    unsigned long ub = sb ? -b : b;

    if ((ua | ub) & OVERFLOW_POSSIBLE_MASK)
    {
        <CURRENT IMPLEMENTATION, AS IS>
    }

If both numbers are evenly distributed from -sys.maxint:sys.maxint,
this yields about a 3% slowdown, though. These numbers are just for
the core multiply path, since I pulled it out in order to compare
algorithms better.

I'm looking into improving the rest, but it's difficult.

-Jerry