Согласно Вольфраму (цитируя Кнута), в то время как 0 ** 0 является неопределенным, иногда оно задается как 1. Это потому, что в некоторых случаях полезно сохранять выражение «x ** 0 = 1» как истинное во всех случаях. Еще интереснее то, что Python также будет считать NaN ** 0 равным 1.
http://mathworld.wolfram.com/Power.html
В случае бесконечности ** бесконечность, вы на самом деле не имеете дело с математической концепцией бесконечности здесь (где это было бы неопределенным), а скорее с числом, которое слишком велико и переполнилось. Таким образом, все, что говорится в этом утверждении, так это то, что число, которое огромно для силы другого числа, все еще является числом, которое огромно.
Edit: я не думаю, что в Python возможно перегрузить встроенный тип (такой как float), поэтому перегрузить оператор float .__ pow __ (x, y) напрямую. Что вы могли бы сделать, это определить свою собственную версию float.
class myfloat(float):
def __pow__(x,y):
if(x==y==0):
return 'NaN'
else:
return float.__pow__(x,y)
m = myfloat(0)
m**0
Не уверен, что это именно то, что вы ищете.