Почему 0 ** 0
равно 1
в Python? Не следует ли это исключать, например 0 / 0
?
Почему 0 ** 0 равно 1 в python
Ответ 1
В Википедии есть интересный обзор истории и различных точек зрения на ценность 0 ** 0
:
Дискуссия продолжается, по крайней мере, с начала 19 века. В то время большинство математиков согласились с тем, что
0 ** 0 = 1
, пока в 1821 году Коши не перечислил0 ** 0
вместе с такими выражениями, как0⁄0
, в таблице неопределенных форм. В 1830-х годах Либри опубликовал неубедительный аргумент в пользу0 ** 0 = 1
, и Мебиус встал на его сторону...
Применительно к компьютерам IEEE 754 рекомендует несколько функций для вычисления мощности. Он определяет pow(0, 0)
и pown(0, 0)
как возвращающие 1
, и powr(0, 0)
как возвращающие NaN
.
Большинство языков программирования придерживаются соглашения 0 ** 0 == 1
. Python не является исключением, как для целочисленных аргументов, так и для аргументов с плавающей точкой.
Ответ 2
рассмотрим x^x
:
Используя пределы, мы легко можем перейти к нашему решению и переставить x^x
, получим:
x^x= exp(log(x^x))
Теперь у нас есть:
lim x->0 exp(log(x^x))= exp(lim x->0 xlog(x)) = exp(lim x->0 log(x)/(x^-1))
Применяя правило L'Hôpital
, получаем:
exp(lim x^-1/(-x^-2)) = exp(lim x->0 -x) = exp(0) = 1=x^x
Но согласно Вольфрам Альфа 0**0
неопределен, и следующие объяснения были получены ими:
0 ^ 0 - undefined. Отсутствие четко определенного значения для этого величина следует из взаимно противоречивых фактов, что а ^ 0 всегда 1, поэтому 0 ^ 0 должно равняться 1, но 0 ^ а всегда 0 (при a > 0), поэтому 0 ^ 0 должно равняться 0. Можно утверждать, что 0 ^ 0 = 1 является естественным определением так как lim_ (n- > 0) n ^ n = lim_ (n- > 0 ^ +) n ^ n = lim_ (n- > 0 ^ -) n ^ n = 1. Однако предел для общих комплексных значений n не существует. Поэтому выбор определение для 0 ^ 0 обычно определяется как неопределенное. "
Ответ 3
2 ^ 2 = (1 + 1) * (1 + 1) = 4 (два объекта встречались два раза)
2 ^ 1 = (1 + 1) * 1 = 2 (два объекта произошли один раз)
2 ^ 0 = (1 + 1) * 0 = 0 (двух объектов не было)
1 ^ 2 = 1 * (1 + 1) = 2 (один объект встречался два раза)
1 ^ 1 = 1 * 1 = 1 (один объект произошел один раз)
1 ^ 0 = 1 * 0 = 0 (один объект не обнаружен)
0 ^ 2 = 0 * (1 + 1) = 0 (ноль объектов встречалось дважды)
0 ^ 1 = 0 * 1 = 0 (ноль объектов произошло один раз)
0 ^ 0 = 0 * 0 = 0 (нулевых объектов не было)
Поэтому вы не можете сделать что-то из ничего!