In [25]: np.power(10,-100)
Out[25]: 0
In [26]: math.pow(10,-100)
Out[26]: 1e-100
I would expect both the commands to return 1e-100. This is not a precision issue either, since the issue persists even after increasing precision to 500. Is there some setting which I can change to get the correct answer?
numpy method assumes you want integer returned since you supplied an integer.
works as you would expect.
Oh, it's much "worse" than that:
But this is a hint to what's going on:
10
is an integer, andnumpy.power
doesn't coerce the numbers to floats. But this works:Note, however, that the power operator,
**
, does convert to float:(Just a footnote to the two other answers on this page.)
Given input two input values, you can check the datatype of the object that
np.power
will return by inspecting thetypes
attribute:Python-compatible integer types are denoted by
l
, compatible-compatible Python floats byd
(documents).np.power
effectively decides what to return by checking the types of the arguments passed and using the first matching signature from this list.So given 10 and -100,
np.power
matches theinteger integer -> integer
signature and returns the integer0
.On the other hand, if one of the arguments is a float then the integer argument will also be cast to a float, and the
float float -> float
signature is used (and the correct float value is returned).