Экспоненциальный оператор в Python - дает другой результат с использованием переменных и с использованием прямых значений - PullRequest
0 голосов
/ 07 февраля 2020

Мы используем экспоненциальный оператор, как показано ниже, для присвоения значений переменным:

>>> a = -1.5
>>> b = 0.44
>>> c = (a ** b)
>>> c
(0.22397855343551604+1.1741366953411416j)

Если мы используем прямые значения в экспоненциальном операторе, результат будет другим:

>>> d = (-1.5 ** 0.44)
>>> d
-1.195308902228074

Нам нужно второй вывод с использованием переменных.

1 Ответ

3 голосов
/ 07 февраля 2020

Проблема в том, что - имеет более низкий приоритет, чем **, поэтому выражение -1.5 ** 0.44 фактически анализируется, как если бы оно было -(1.5 ** 0.44).

Чтобы получить правильный результат, вы должны напишите (-1.5) ** 0.44.

>>> -1.5 ** 0.44
-1.195308902228074
>>> -(1.5 ** 0.44)
-1.195308902228074
>>> (-1.5) ** 0.44
(0.22397855343551604+1.1741366953411416j)

Результат -1.195308902228074 на самом деле неверен математически, но если вы действительно хотите получить результат некорректный после присвоения чисел переменным, вы можете использовать abs и math.copysign:

>>> a = -1.5
>>> b = 0.44
>>> import math
>>> math.copysign(abs(a) ** b, a)
-1.195308902228074
...