[issue22198] Odd floor-division corner case

Steven D'Aprano report at bugs.python.org
Thu Aug 14 21:19:14 CEST 2014


Steven D'Aprano added the comment:

On Thu, Aug 14, 2014 at 04:47:41PM +0000, Mark Dickinson wrote:

> I'm not sure it's worth fixing this, but it seems worth recording:
> 
> >>> -0.5 // float('inf')
> -1.0
> 
> I was expecting a value of `-0.0`, and while IEEE 754 doesn't cover 
> the floor division operation, I'm reasonably confident that that's the 
> value it would have recommended if it had. :-)

Hmmm. I'm not so sure. -0.5 // something_really_big gives -1:

py> -0.5//1e200
-1.0

Consider something_really_big as it gets bigger and bigger and 
approaches infinity, if we *informally* take the limit -> inf I think it 
makes sense for it to return -1. Another way of looking at it is that 
-0.5/inf returns a negative infinitesimal quantity, and then taking the 
floor returns -1. So I think the current behaviour is "correct", for 
some definition of correct.

The alternative is a discontinuity, where -0.5//x = -1 for all finite 
but huge x and then suddenly 0 when x overflows to infinity. That's 
probably a bad idea.

----------
nosy: +steven.daprano

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue22198>
_______________________________________


More information about the Python-bugs-list mailing list