2013-07-19 10 views
18

Kiedy próbowałem to w terminaluValueError: liczba ujemna nie może zostać podniesiona do potęgi ułamkowej

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

mam następujący błąd

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

Jednak jestem w stanie to zrobić w dwóch etapach jak,

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

Dlaczego to zachowanie? Jaki jest sposób rozwiązania tego problemu w pojedynczej linii?

+0

(ewentualnie) powiązane: http://stackoverflow.com/questions/4114740/negative-pow-in-python – TerryA

+0

@ Haidro, Tak, widziałem pytanie, ale moje pytanie jest (-1.07) ** 1.3 jest błąd rzucania, ale -1.07 ** 1.3 nie jest rzucanie błąd, dlaczego? –

+0

Myślę, że to dotyczy liczb zespolonych. Pierwiastek kwadratowy (moc ułamkowa) ujemnego 1 wynosi i. Beluje się, kiedy myśli, że wchodzi na skomplikowane terytorium. – Jiminion

Odpowiedz

17

Podnoszenie mocy ma pierwszeństwo przed jednokrotnym znakiem minus.

Więc trzeba -(0.13905775075987842 ** 0.2) i nie (-0.13905775075987842) ** 0.2 jak można się spodziewać:

>>> -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 

Jeśli chcesz go do pracy należy napisać (-3.66/26.32 + 0j)**0.2

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

lub przełącznik Python 3 jak zauważył @TimPietzcker.

+4

Można również promować do liczby zespolonej za pomocą rzutowania: 'x = -1; complex (x) ** 0.5' –

+0

@ Prashant, to w zasadzie to samo co '-1 + 0j' –

+0

Tak, jest. Po prostu dodając inny sposób, w jaki można to zrobić. To taka mała uwaga, nie zasługuje na osobną odpowiedź. –

7

przełącznik Python 3, który automatycznie promuje wynik wielu złożonych:

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

Mój szef może podjąć decyzję. –

Powiązane problemy