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