# Why 0 ** 0 equals 1 in python

Posted on

### Question :

Why 0 ** 0 equals 1 in python

Why does `0 ** 0` equal `1` in Python? Shouldn’t it throw an exception, like `0 / 0` does?

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 listed `0 ** 0` along with expressions like `0?0` in a table of undefined forms. In the 1830s Libri published an unconvincing argument for `0 ** 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.

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.”

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!