On Thu, 21 Jan 2016 08:11 pm, Ben Finney wrote: > Shiyao Ma <i...@introo.me> writes: > >> I wanna simulate C style integer division in Python3. > > I'm not sure I know exactly what behaviour you want (“C style” may mean > different things to each of us).
Surely is means "whatever the C standard defines integer division to mean". Are their any C programmers here who can tell us what the C standard says? According to this: http://stackoverflow.com/questions/3602827/what-is-the-behavior-of-integer-division-in-c the behaviour of integer division was implementation dependent in C89, but has now been specified in detail since C99. The answer is that a/b for integers a and b *truncate towards zero*. That is, it returns the integer part with no fractional part: Both arguments are positive, or both negative: 11/2 = 5.5 so throw away the 0.5 and return 5 -11/-2 = 5.5 so throw away the 0.5 and return 5 One argument is positive and the other negative: -11/2 = -5.5 so throw away the 0.5 and return -5 11/-2 = -5.5 so throw away the 0.5 and return -5 Python's integer division // performs flooring, not truncating, so it disagrees in the case that exactly one of the arguments are negative: py> 11//2 5 py> -11//-2 5 py> 11//-2 -6 py> -11//2 -6 So my guess is that the fastest, and certainly the most obvious, way to get the same integer division behaviour as C99 would be: def intdiv(a, b): # C99 style integer division with truncation towards zero. n = a//b if (a < 0) != (b < 0): n += 1 return n -- Steven -- https://mail.python.org/mailman/listinfo/python-list