Что следует вернуть 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.