Причина, по которой ваши вычисления не работают, заключается в том, что:
(-8)^(1/3) --> an integer, -2
(-8)^(0.33333333333333) --> a complex number
То есть значения с плавающей запятой являются неточными и не могут представлять что-то около одной трети. И значение должно быть точно 1/3, чтобы значение было числом с плавающей запятой.
Если вы знаете, что значение может быть представлено как значение с плавающей запятой, то вы можете use:
sign(-8) * power(abs(-8), 1.0 / 3)
Примечание. Это работает не во всех случаях. Тривиально:
sign(-4) * power(abs(-4), 1.0 / 2)
вернет -2, что не является правильным ответом.