2016-12-09 4 views
0

Почему python делает print(type(-1**0.5)) return float вместо complex?Оператор экспоненты Python и комплексные номера

Получение квадратного корня из отрицательного целого числа float всегда математически рассматривается как комплексное число. Как оператор поддержки экспонентов python получает номер complex?

print(type(-1**0.5)) 
<type 'float'>  

ответ

3

В математическом порядке операций, возведение предшествует умножение и унарные минус подсчеты как умножение (на -1). Таким образом, ваше выражение совпадает с -(1**0.5), которое не содержит никаких мнимых чисел.

Если вы сделаете (-1)**0.5, вы получите сообщение об ошибке Python 2, потому что ответ не является реальным числом. Если вам нужен сложный ответ, вам необходимо использовать сложный ввод, выполнив (-1+0j)**0.5. (В Python 3, (-1)**0.5 вернет сложный результат.)

1

Попробуйте (-1)**0.5 вместо этого.

-1**0.5 соответствует 1.

>>> -1**0.5 
-1 
>>> (-1)**0.5 
(6.123e-17+1j) 
1

Сначала выполняется возведение в степень, а затем его знак инвертирован. Для того, чтобы получить результат, который вы хотите использовать круглые скобки, чтобы гарантировать, что - знака остается с 1:

>>> -1**0.5 
-1.0 
>>> (-1)**0.5 
(6.123233995736766e-17+1j) 
1

Python верен как -1**0.5 отличается от (-1)**0.5.

Первый вызывает один до степени 0.5 и отрицает результат.

Второе поднимает -1 на ту же мощность и возвращает комплексное число, как ожидалось.