Skip to content Skip to sidebar Skip to footer

Python Integer Division Operator Vs Math.floor

Is there any benefit in performance using integer division operator over math.floor? 7 // 2 over math.floor(7/2)

Solution 1:

Integer division is much faster than a math.floor function call:

>>>import timeit>>>timeit.timeit('7//2')
0.024671780910702337
>>>timeit.timeit('floor(7/2)', setup='from math import floor')
0.27053647879827736
>>>timeit.timeit('math.floor(7/2)', setup='import math')
0.3131167508719699

As you can see with this disassembly, using the math module's floor function (with import math and math.floor or from math import floor and floor) involve extra lookups and function calls over the plain integer division:

>>>import dis>>>import math>>>from math import floor>>>definteger_division():...7//2...>>>defmath_floor():...    floor(7/2)...>>>defmath_full_floor():...    math.floor(7/2)...>>>dis.dis(integer_division)
  2           0 LOAD_CONST               3 (3)
              3 POP_TOP
              4 LOAD_CONST               0 (None)
              7 RETURN_VALUE
>>>dis.dis(math_floor)
  2           0 LOAD_GLOBAL              0 (floor)
              3 LOAD_CONST               3 (3.5)
              6 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
              9 POP_TOP
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE
>>>dis.dis(math_full_floor)
  2           0 LOAD_GLOBAL              0 (math)
              3 LOAD_ATTR                1 (floor)
              6 LOAD_CONST               3 (3.5)
              9 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             12 POP_TOP
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE

Post a Comment for "Python Integer Division Operator Vs Math.floor"