que tiene este problemapow negativa en pitón
>>> import math
>>> math.pow(-1.07,1.3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
alguna sugerencia?
que tiene este problemapow negativa en pitón
>>> import math
>>> math.pow(-1.07,1.3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
alguna sugerencia?
(-1.07) 1.3 no será un número real, por lo tanto, el error de dominio Math.
Si necesita un número complejo, un b debe reescribirse en e b ln un, por ejemplo,
>>> import cmath
>>> cmath.exp(1.3 * cmath.log(-1.07))
(-0.6418264288034731-0.8833982926856789j)
Si solo desea devolver NaN, tome esa excepción.
>>> 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
Por cierto, en Python por lo general la incorporada en a ** b
se utiliza para elevar el poder, no 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)
estoy usando Python 2.5.4 y me sale esto:
>>> import math
>>> math.pow(-1.07,1.3)
nan
¿Qué versión de Python está usando?
Python ≥2.6 ya crea la excepción. – kennytm
No utilice prisionero de guerra, y crea el complejo exponente (0j
añadir a ella). Aquí está un ejemplo:
In [15]: (-1.07)**(1.3+0j)
Out[15]: (-0.64182642880347307-0.88339829268567893j)
No hay necesidad de funciones matemáticas :)
Desde el título de este post lo que indica que la potencia es negativa, ¿es posible que en realidad quería 1.3 - 1.07 en lugar de -1.07 1.3?
Los poderes no enteros de números complejos (y negativos) implican una sutileza importante. La función exponencial es inyectiva en la línea real; es decir, exp (a) = exp (b) implica a = b. Esto NO es así en el plano complejo. Como exp (2 * pi * i) = 1, la función exponencial es 2 * pi * i-periodic.
Esto lleva al problema: ¿Qué rama de la función de registro usamos? Dicha pregunta es una de las preguntas centrales del análisis complejo.
Python está respondiendo inteligentemente a esta situación. A menos que uses explícitamente su constructor de número complejo, estarás traficando en reales. Dado que las potencias fraccionarias de los negativos NUNCA son reales, Python está lanzando una excepción.
citando el manual: "Si tanto x como y son finitos, x es negativo, y y no es un número entero, entonces pow (x, y) no está definido, y aumenta ValueError". – zellus