On Python 2 & 3:
10 ** -9 == 10 ** int(-9) == pow(10, -9) == 10e-9
However, with newint, any negative power still returns a newint, which becomes 0:
from future.builtins import int as newint
pow(10, newint(-9)) == 0
In such case, __pow__() should return a float.