Я удивлен, что
>>> 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 есть разные рассуждения? или это проблема в реализации?