# What is the difference of int(n/2) and n//2 in python?

1 min readFeb 10, 2024

Today I got stuck in an intersting problem. I am not sure the reason until I realize that there is some difference of

int(n / 2) and n // 2 in python under some scenario.

The problem

https://atcoder.jp/contests/abc340/tasks/abc340_c

# v1 (using int( n / 2), which has issue)

`from functools import lru_cache `

N = int(input())

@lru_cache(None)

def f(n):

if n <= 1:

return 0

else:

half = int(n / 2)

if n % 2 == 0:

return n + 2*(f(half))

else:

return n + f(half) + f(half + 1)

print(f(N))

the output

`1000000000000000000000000000000000`

109701925785366288902160823344955392

# v2 (using n//2, which works)

`from functools import lru_cache `

N = int(input())

@lru_cache(None)

def f(n):

if n <= 1:

return 0

else:

half = n // 2

if n % 2 == 0:

return n + 2*(f(half))

else:

return n + f(half) + f(half + 1)

print(f(N))

The output

`1000000000000000000000000000000000`

109701925785366293092867375917694976

They have different outputs for the following input

`1000000000000000000000000000000000`

The reason goes to the floating point number is not very accurate when the number is too large.

`>>> 1000000000000000000000000000000000//2`

500000000000000000000000000000000

>>> 1000000000000000000000000000000000/2

5e+32

>>> int(1000000000000000000000000000000000/2)

499999999999999972787615493521408