Why does 0 ** 0
equal 1
in Python? Shouldn\'t it throw an exception, like 0 / 0
does?
2^2 = (1+1)*(1+1) = 4 (two objects occured two times)
2^1 = (1+1)*1 = 2 (two objects occured one time)
2^0 = (1+1)*0 = 0 (two objects did not occur)
1^2 = 1 *(1+1) = 2 (one object occured two times)
1^1 = 1 *1 = 1 (one object occured one time)
1^0 = 1 *0 = 0 (one object did not occur)
0^2 = 0 *(1+1) = 0 (zero objects occured twice)
0^1 = 0 *1 = 0 (zero objects occured once)
0^0 = 0 *0 = 0 (zero objects did not occur)
Therefore you cannot make something from nothing!
consider x^x
:
Using limits we can easily get to our solution and rearranging x^x
we get :
x^x= exp(log(x^x))
Now , we have from:
lim x->0 exp(log(x^x))= exp(lim x->0 xlog(x)) = exp(lim x->0 log(x)/(x^-1))
Applying L'Hôpital
rule , we get :
exp(lim x^-1/(-x^-2)) = exp(lim x->0 -x) = exp(0) = 1=x^x
But according to Wolfram Alpha 0**0
is indeterminate and following explanations were obtained by them :
0^0 itself is undefined. The lack of a well-defined meaning for this quantity follows from the mutually contradictory facts that a^0 is always 1, so 0^0 should equal 1, but 0^a is always 0 (for a>0), so 0^0 should equal 0. It could be argued that 0^0=1 is a natural definition since lim_(n->0)n^n=lim_(n->0^+)n^n=lim_(n->0^-)n^n=1. However, the limit does not exist for general complex values of n. Therefore, the choice of definition for 0^0 is usually defined to be indeterminate."
Wikipedia has interesting coverage of the history and the differing points of view on the value of 0 ** 0
:
The debate has been going on at least since the early 19th century. At that time, most mathematicians agreed that
0 ** 0 = 1
, until in 1821 Cauchy listed0 ** 0
along with expressions like0⁄0
in a table of undefined forms. In the 1830s Libri published an unconvincing argument for0 ** 0 = 1
, and Möbius sided with him...
As applied to computers, IEEE 754 recommends several functions for computing a power. It defines pow(0, 0)
and pown(0, 0)
as returning 1
, and powr(0, 0)
as returning NaN
.
Most programming languages follow the convention that 0 ** 0 == 1
. Python is no exception, both for integer and floating-point arguments.