# Nasty typo in PEP 238 (revised)

David Eppstein eppstein at ics.uci.edu
Fri Jul 27 00:12:08 EDT 2001

```In article <3B60D432.5060109 at nospiced.ham.devis.com>,
Tom Jenkins <tjenkins at nospiced.ham.devis.com> wrote:

> >>    A. Use x*1.0/y for true division, divmod(x, y)[0] for int
> >>       division.  Especially the latter is best hidden inside a
> >>       function.  You may also write floor(x)/y for true division if
> >>       you are sure that you don't expect complex numbers.
> >>
> >
> >
> > Shouldn't this be float(x)/y ?
> >
> > I still don't like the phrase "true division", it implies a value judgement
> > that quotients are somehow an inferior thing to want to compute.
> >
>
> David,
> I'm not sure.  I thought so to, but decided to try it in the interpreter
> first (since I never used floor before)

floor converts ints to floats????  This seems exactly backwards from what I
would expect.  And while it is certainly documented that way in the library
reference (section 5), it is contradicted by the footnote in section 2
about using floor and ceil for "well-defined conversions" from float to
int, as well as the claim in the reference manual that integer-division is
the same as applying floor to the result of mathematical division.

I have to consider this a big wart.
Especially with the proposed changes to /, I would likely want to write
code like i = floor(a/b) and j = ceil(c/d) but apparently this is going to
need added coercions to get an integral type.

Anyway, back to the PEP, I don't think calling floor(x) is a very clear way
of writing an int-to-float coercion, and it's still a bug because it will
give you incorrect results if x is a non-integral float.
--
David Eppstein       UC Irvine Dept. of Information & Computer Science
eppstein at ics.uci.edu http://www.ics.uci.edu/~eppstein/

```