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
Почему такое поведение? Каким образом это можно решить в одной строке?
Ответы
Ответ 1
Приведение в степень имеет приоритет над унарным знаком минус.
Итак, у вас есть -(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.
Ответ 2
Переключитесь на Python 3, который автоматически продвигает результат на комплексное число:
>>> (-3.66/26.32)**0.2
(0.5452512685753758+0.39614823506888347j)