Home » programming » Floating mistakes

# Floating mistakes

Can you see the difference in Python 2 and Python 3 in the following code?

```from math import log

def test():
a = 926941184
b = 737498881
print(a/b)
print(log(a/b, 2))
```

It is the division operator. In Python 2, the result of the division is 1, therefore the log of the result is 0 while in Python 3 we get a floating number. Keeping that in mind, spot the mistake in the following code. We want to compute whether every number in the iterable A is can be obtained by any element in A by multiplying or dividing by 2. We assume that the given numbers are positive.

```from math import log

def isPowerOfTwo(num):
return int(log(num, 2)) == log(num, 2)

max_el = max(A)
for x in A:
if not isPowerOfTwo(max_el / x):
return "NO"
return "YES"
```

The code above is correct for Python 3 but not for Python 2.

```from __future__ import division
```

That fixes the issue.

Of course, there are better ways to check whether a number is a power of two (assuming that it is an integer).

```def isPowerOfTwo(num):
return num & (num - 1) == 0
```