Saltar al contenido

Raíz cúbica de un número negativo


tuve

Recommended Posts

publicado

SOLUCIONADO Raíz cúbica de un número negativo

Al operar de esta manera (-9)^(1/3) en excel se devuelve el resultado de forma correcta, pero en VBA se produce un error.

Sub raiz_negativo()
Debug.Print (-9) ^ (1 / 3)
End Sub[/CODE]

Conoceís el motivo y algún forma de evitarlo, sólo se me ocurre:

[CODE] Resultado = Abs(Numero) ^ (1 / 3)
If Numero < 0 Then Resultado = -1 * Resultado
[/CODE]

Un saludo

publicado

Hola tuve:

No me preguntes el porqué, porqué no lo se, pero si quitas el paréntesis, funciona.

Sub raiz_negativo()

Debug.Print -9 ^ (1 / 3)

End Sub[/CODE]

Gusto en saludarte

publicado

Gracias a los dos,

tese1969, no me funciona, me cambia el .0 por # y al ejecutar me dá error.

maese Macro Antonio, un placer saludarte, al no poner los paréntesis no se incluye el signo dentro de la operación, y aunque en este caso el resultado es el mismo no me sirve ya que el número interior procede de otra operación

publicado

Hola,

aunque el resultado pueda ser el mismo, no es la misma operación -9^(1/3) que (-9)^(1/3).

La regla indica que la exponenciación precede a la negación unitaria, lo cual respeta VBA pero no Excel, que le da precedencia a la negación unitaria, por lo que -9^(1/3) es lo mismo que (-9)^(1/3).

Al VBA darle precedencia a la exponenciación, la expresión matemática -9^(1/3) se evalua como -(9^(1/3) mientras que (-9)^(1/3) se evalua tal cual y arroja un error ya reportado y conocido en VBA al tratar de obtener la raíz de un número negativo (en este caso, runtime error '5') que no arroja en la expresión -9^(1/3) pues allí no se trata de extraer la raiz de un número negativo, sino que se le aplica la negación unitaria a la expresión, tal que -(9^(1/3)).

En Excel, como dije, es otra historia, pues se le da precedencia a la negación, puedes comprabarlo con: =-2^(1/2) que arrojará #NUM al igual que =(-2)^(1/2), mientras que =-(2^(1/2)) arroja -1.4142... que es lo mismo que arroja la expresión -2^(1/ 2) en VBA y que da error en Excel.

Edito: La ayuda de VBA indica claramente que el operador ^ cuando usa como argumento un número negativo (ej. (-9)^(1/2), el operador ^ espera como exponente sólo un número entero, y 1/2 no lo es. Prueba: (-2)^(2.3). Así que el problema no es sólo con las raices y está documentado en el uso del operador ^. Mientras que cuando se usa -9^(1/2), como ya está claro, no se le está pasando un número negativo sino que se está negando el resultado del exponente de un número positivo -(9^(1/2)), por lo que es válido.

publicado

... y mientras yo me tomaba cinco minutos en responder, parece tuve ya ha dicho lo mismo pero con menos palabras :). Por algo me tomé 5 minutos en responder, JA. De haber sabido.... el silencio es oro.

Para no quedar como un burro, he coplementado mi explicación anterior :).

publicado

Hola Mauricio,

Pero excel opera de forma correcta (-9)^(1/3) devuelve el resultado correcto, el ejemplo que pones (-2)^(1/2) sería la raiz cuadrada de un número negativo, lo que nos daría un número imaginario (-i), pero no así la raíz cúbica de -9 que debería dar número real.

No es un error de prioridad de operaciones de VBA ya que con los parántesis las gestionas como quieras, el problema es que VBA no permite (o no conozco) la forma de trabajar con estas operaciones.

Un saludo

publicado
...No es un error de prioridad de operaciones de VBA ya que con los parántesis las gestionas como quieras, el problema es que VBA no permite (o no conozco) la forma de trabajar con estas operaciones....

Gracias tuve por la retroalimentación.

Nunca dije que fuera un error de prioridad. Sólo explicaba que -9^(1/3) no es lo mismo que (-9)^(1/3) por lo que esa solución no era válida (y por eso dije que ya tu habías dicho lo mismo). Explicaba como Excel le da precedencia a la negación mientras VBA se lo da, correctamente, a la exponenciación.

El error se da, como dije, porque el operador ^ sólo acepta exponentes enteros cuando recibe un número negativo, lo cual está documentado. Es un problema de exponenciación en VBA con el operador ^ que no permite sacar raices de números negativos. Eso es todo, lo demás eran florituras :).

He editado mi respuesta anterior para resaltar esto.

...el ejemplo que pones (-2)^(1/2) sería la raiz cuadrada de un número negativo, lo que nos daría un número imaginario (-i)...

Por eso precisamente escogí ese ejemplo y no (-9)^(1/3), pues allí no se vería el error y no habría cómo demostrar el punto.

publicado

gracias mauricio, ha quedado perfectamente claro, a falta de alternativa seguire utilizando el valor absoluto de ese numero y cambiarle de signo en el caso de que sea menor que cero, saludos

publicado
...a falta de alternativa seguire utilizando el valor absoluto de ese numero y cambiarle de signo en el caso de que sea menor que cero...

Maestro tuve, permíteme una sugerencia final :). Ya que Excel no presenta este problema, es una restricción de VBA con el operador ^, pero no de Excel, puedes usar el operador ^ de Excel, recordando que en Excel la negación precede a la exponenciación, por lo que puedes usar, ahí sí -9^(1/3) que equivale a (-9)^(1/3):

?[(-9)^(1/3)] ó ?[-9^(1/3)]

publicado

Buena opción Mauricio, a raiz de tu información he pensado otra

WorksheetFunction.Power(-9, (1 / 3))[/CODE]

Quizás utilice esta última por ser algo más flexible que Evaluate.

Un saludo

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.