Comment on PEP-0238

Robert J. Harrison rjh at 3-cities.com
Sat Jul 7 13:05:44 EDT 2001


Guido van Rossum <guido at python.org> wrote in message news:<cpsngaja4g.fsf at cj20424-a.reston1.va.home.com>...

> The warning framework and the future statement are there to make the
> transition easier.  Here's my plan, "new division in four phases":
> 
> 1. First we introduce a new function div() and a future statement that
>    makes integer division return a float result for a specific module.
> 
> 2. In a following revision, we add a warning when / is used on two int
>    or long arguments, recommending to use div() instead.  (It is
>    important not to start warning in phase 1, so folks have time to
>    switch to div() voluntarily first; maybe phase 1 could have a
>    command line option to warn about integer division.)
> 
> 3. A revision later, we change all plain integer divisions to be an
>    error, *forcing* folks to use div() or use the future statement to
>    specify floating point division.
> 
> 4. Finally we can implement the "future" behavior by default.
> 
> I haven't picked dates yet; if folks agree, I would like to add div()
> and a future statement to 2.2 and space the other steps a single
> revision apart, so phase 4 would be at Python 2.5 (April 2003, if we
> keep the current release schedule up).  Is that too aggressive?
> 
> I currently favor div(x, y) over x//y and x div y.  Maybe also add
> mod(x, y) for symmetry (that would also explain divmod() as a
> messenger from the future :-).
> 
> I'm not sure how to spell the future statement.  Here are some
> choices:
> 
>   from __future__ import float_division
>   from __future__ import real_division
>   from __future__ import new_division
>   from __future__ import division
> 
> --Guido van Rossum (home page: http://www.python.org/~guido/)


Sounds good to me.  If it must happen, then the sooner the better.

However, I think that some details of the numerics also need to
be clarified before you boldly go.  Specifically,

 - What about long division?  A float cannot capture all results.
   Should it raise a Value/Range error?
   Should the programmer be forced to use divmod?
   Should it return a rational?  
   I don't really like the last two choices and the first two choices
   obviate much of the usefulness of longs.

   Perhaps Paul Dubois's kinds mechanism comes to the rescue?
   He does have a trial implementation in numeric (though 
   I am not in favor of seeing much of the current numeric 
   integrated into the core)

Robert

rjh at 3-cities.com



More information about the Python-list mailing list