Я удивлен, что
>>> import math
>>> 1**math.nan
1.0
И пока мы на нем, также, что
>>> 0j**math.nan
0j
Я не нашел других примеров. Есть ли причина или какая-то логика, которую я пропустил, что делает это правильным выбором? Или это промах?
Я ожидал nan
. Что касается любого другого номера, кроме 1
или 0j
.
Редактировать 1: Благодаря комментарию jedwards ниже у меня есть ссылка. Но я до сих пор не понимаю, почему. Почему это было принято в качестве стандарта? Кроме того, не удалось найти ссылку на 0j**mat.nan
...
Изменить 2: Итак, следуя приведенным ниже ответам и некоторым другим материалам, логика может быть такой: любой расчет, включающий nan
, должен возвращать nan
, если вычисление всегда возвращает тот же ответ независимо от аргументов. В таких случаях тот факт, что мы имеем nan
в качестве аргумента, не должен влиять на результат, и мы должны получить фиксированный ответ.
Это, безусловно, объясняет 1**math.nan
и math.nan**0
. Это также объясняет, почему 0**math.nan
дает nan
, а не 0
(так как 0**n
есть 0
для всех, но если n=0
, где он получается с помощью 1
), и может быть растянут, чтобы покрыть почему math.nan*0
nan
, если мы согласны с тем, что аргумент не обязательно конечен.
Но если это логика сцены, тогда 0j**math.nan
должен был быть nan
, так как 0j**n
- 0
для всех n
кроме n=0
, где 0j**0
- 1
. Итак... у 0j**math.nan
есть разные рассуждения? или это проблема в реализации?