Signed zeros: is this a bug?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Sun Mar 11 15:48:04 EDT 2007


En Sun, 11 Mar 2007 15:26:01 -0300, Alex Martelli <aleax at mac.com> escribió:

> Or maybe we should give up ever storing -0.0 in the tables
> of constant and ALWAYS have "0.0, unary-minus" wherever it appears (that
> would presumably require working on the AST-to-bytecode visitors that
> currently work ever-so-slightly-differently for this specific
> troublespot in the C-coded version vs the Python-coded one...).

I think that way is the less intrusive, doesn't rely on a particular FP  
implementation, and the more likely to be accepted.
Looking at ast.c, the culprit is some optimization in ast_for_factor, line  
1506
     /* If the unary - operator is applied to a constant, don't generate
        a UNARY_NEGATIVE opcode.  Just store the approriate value as a
        constant.  The peephole optimizer already does something like
        this but it doesn't handle the case where the constant is
        (sys.maxint - 1).  In that case, we want a PyIntObject, not a
        PyLongObject.
     */

After the long "if", I would use parsenumber(STR(pnum)) and check the type  
and value of the resulting object; if it's a float and 0.0, skip the  
optimization and continue below as a normal case.
Unfortunately I'm not able to compile and test the code right now, so I  
can't provide an actual patch. (At least, not until tuesday). But I hope  
this simple comment is useful anyway...

(I cannot find peephole.c on the source distribution for Python 2.5, but  
you menctioned it on a previous message, and the comment above refers to  
the peephole optimizer... where is it?)

-- 
Gabriel Genellina




More information about the Python-list mailing list