2013-07-19 4 views
18

Когда я попробовал это в терминалеValueError: отрицательное число не может быть повышен до дробной степени

>>> (-3.66/26.32)**0.2 

я получил следующую ошибку

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: negative number cannot be raised to a fractional power 

Однако, я могу сделать это в два этапа например,

>>> (-3.66/26.32) 
-0.13905775075987842 
>>> -0.13905775075987842 ** 0.2 
-0.6739676327771593 

Почему такое поведение? Каков способ решить эту проблему в одной строке?

+0

(возможно), связанных с: http://stackoverflow.com/questions/4114740/negative-pow-in-python – TerryA

+0

@ Haidro, Да, я видел вопрос, но мой вопрос: (-1.07) ** 1.3 бросает ошибку, но -1.07 ** 1.3 не бросает ошибку, почему? –

+0

Я думаю, что это относится к сложным числам. Квадратный корень (дробная мощность) отрицательного 1 равен i. Это тюки, когда он думает, что он попадает в сложную территорию. – Jiminion

ответ

17

Подъем к власти имеет приоритет над унарным знаком минус.

Так у вас есть -(0.13905775075987842 ** 0.2) и не (-0.13905775075987842) ** 0.2, как вы ожидаете:

>>> -0.13905775075987842 ** 0.2 
-0.6739676327771593 
>>> (-0.13905775075987842) ** 0.2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: negative number cannot be raised to a fractional power 

Если вы хотите работать, вы должны написать (-3.66/26.32 + 0j)**0.2

>>> (-3.66/26.32 + 0j)**0.2 
(0.5452512685753758+0.39614823506888347j) 

Или переключиться на Python 3, как было отмечено @TimPietzcker.

+4

Вы также можете продвигать на сложное число с помощью cast: 'x = -1; complex (x) ** 0.5' –

+0

@Prashant, это в основном то же самое, что и '-1 + 0j' –

+0

Да, это так. Просто добавив другой способ, это можно сделать. Это такая маленькая заметка, она не заслуживает отдельного ответа. –

7

Переключить на Python 3, который автоматически продвигает результат комплексного числа:

>>> (-3.66/26.32)**0.2 
(0.5452512685753758+0.39614823506888347j) 
+2

Мой босс может принять решение. –

Смежные вопросы