Ошибка вычисления с помощью оператора pow

Что следует вернуть print (-2 ** 2)? По моим расчетам это должно быть 4, но интерпретатор возвращает -4.
Является ли эта вещь Python или моя математика такой страшной?

Ответ 1

Согласно docs, ** имеет более высокий приоритет, чем -, поэтому ваш код эквивалентен -(2 ** 2). Чтобы получить желаемый результат, вы можете положить -2 в круглые скобки

>>> (-2) ** 2
4

или использовать встроенную pow функцию

>>> pow(-2, 2)
4

или math.pow function (return float value)

>>> import math
>>> math.pow(-2, 2)
4.0

Ответ 2

Операция ** выполняется перед минусом. Чтобы получить ожидаемые результаты, вы должны сделать

print ((-2) ** 2)

Из документации:

Таким образом, в несравненной последовательности степенных и унарных операторов операторы оцениваются справа налево (это не ограничивает порядок оценки для операндов): -1**2 приводит к -1.

В документации также доступна полная информация о приоритете операторов. Вы можете видеть, что последняя строка (expr), которая заставляет expr оцениваться перед использованием, поэтому результат (-2) ** 2 = 4

Ответ 3

вы также можете использовать математическую библиотеку...

math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2

Ответ 4

У Python есть проблема и не видит -2 как число. Это похоже на дизайн, поскольку он упоминается в документах.

-2 интерпретируется как - (2) {унарный минус положительному числу 2}

Это обычно не дает проблемы, но в -a ** 2 ** имеет более высокий приоритет как - и, следовательно, с - интерпретируется как унарный оператор вместо части числа -2 ** 2, оценивает -2 вместо 2.