ho questo problemapow negativo in python
>>> import math
>>> math.pow(-1.07,1.3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
qualsiasi suggerimento?
ho questo problemapow negativo in python
>>> import math
>>> math.pow(-1.07,1.3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
qualsiasi suggerimento?
(-1.07) 1.3 non sarà un numero reale, quindi l'errore del dominio Math.
Se avete bisogno di un numero complesso, un b deve essere riscritto in e b ln un, per esempio
>>> import cmath
>>> cmath.exp(1.3 * cmath.log(-1.07))
(-0.6418264288034731-0.8833982926856789j)
Se si desidera restituire NaN, rilevare tale eccezione.
>>> import math
>>> def pow_with_nan(x, y):
... try:
... return math.pow(x, y)
... except ValueError:
... return float('nan')
...
>>> pow_with_nan(1.3, -1.07) # 1.3 ** -1.07
0.755232399659047
>>> pow_with_nan(-1.07, 1.3) # (-1.07) ** 1.3
nan
BTW, in Python di solito il built-in a ** b
viene utilizzato per la raccolta di potere, non math.pow(a, b)
.
>>> 1.3 ** -1.07
0.755232399659047
>>> (-1.07) ** 1.3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: negative number cannot be raised to a fractional power
>>> (-1.07+0j) ** 1.3
(-0.6418264288034731-0.8833982926856789j)
Sto usando Python 2.5.4 e ottengo questo:
>>> import math
>>> math.pow(-1.07,1.3)
nan
Quale versione python stai usando?
Python ≥2.6 crea già l'eccezione. – kennytm
Non usare pow, e rendere il complesso esponente (aggiungi 0j
ad esso). Ecco un esempio:
In [15]: (-1.07)**(1.3+0j)
Out[15]: (-0.64182642880347307-0.88339829268567893j)
Non c'è bisogno di funzioni matematiche :)
Dal titolo di questo post indicando che il potere è negativo, è possibile che in realtà voleva 1.3 - 1,07 anziché -1,07 1,3?
Le potenze non truccate di numeri complessi (e negativi) implicano un'importante sottigliezza. La funzione esponenziale è iniettiva sulla linea reale; es. exp (a) = exp (b) implica a = b. Questo NON è così sul piano complesso. Poiché exp (2 * pi * i) = 1, la funzione esponenziale è 2 * pi * i-periodic.
Questo porta al problema: quale ramo della funzione di registro utilizziamo? Tale domanda è una delle questioni centrali dell'analisi complessa.
Python sta rispondendo in modo intelligente a questa situazione. A meno che tu non usi esplicitamente il suo costruttore di numeri complessi, stai per essere traffico di real. Dato che i poteri frazionari dei negativi non sono MAI reali, Python sta gettando un'eccezione in modo appropriato.
citando il manuale: "Se entrambi xey sono finiti, x è negativo e y non è un numero intero allora pow (x, y) non è definito e solleva l'errore ValueError." – zellus