Почему Python возвращает комплексное число для операции x ** x, если -1 <x <0? - PullRequest
1 голос
/ 05 апреля 2020

Я на Windows 10 (64-разрядная машина с 32-разрядной Python 3.7). В IDLE, если я наберу:

>>> -0.001**-0.001
-1.0069316688518042

Но если я сделаю:

>>> x = -0.001
>>> x**x
(1.006926699847276 -0.0031633639300006526j)

Интересно, что величина этого комплексного числа совпадает с фактическим ответом.

В качестве доказательства я приложил такой же скриншот.

Что может быть причиной этого?

Ответы [ 2 ]

4 голосов
/ 05 апреля 2020

В первом случае вы не получаете комплексное число, потому что ** имеет более высокий приоритет, чем - (как в Python, так и в математике), так что вы фактически делаете -(0.001 ** -0.001). Попробуйте (-0.001) ** -0.001.

Комплексное число является «правильным» ответом по математическому определению силовой операции.

1 голос
/ 05 апреля 2020

in Python, оператор ** означает to the power of, отрицательное число, принимающее отрицательную степень, должно создать воображаемое число, как и sqrt(-1)=i.

если вы имели в виду умножение, вы должны использовать x*x вместо x**x

...