I am trying to calculate cubic roots of a complex number according to the following convention:
The convention comes from the following paper: Ting Zhao, Dongming Wang, Hoon Hong. Solution Formulas for Cubic Equations Without or With Constraints. Journal of Symbolic Computation, Elsevier, 2011, 46 (8), pp.904-918.
What is the best way to go about calculating $\sqrt[3]{1+i}$ using this convention?
Specifically, I am implementing this in a computer program using double precision floating point numbers. (64 bit floats, 128 bit complex numbers) I would like to avoid round-off error as much as possible. Speed is secondary to precision, but still important.
The "naive" algorithm I have developed on my own is this:
- Given that $x$ is $1+i$, $arg(x)=0.7853981633974483$
- Therefore, we need to use the third rule from the convention... so we know that $arg(\sqrt[3]{x}) = -\frac{1}{3}arg(x)$
- Compute the right hand side: $arg(\sqrt[3]{1+i}) = 0.2617993877991494$
- $\sqrt[3]{1+i}$ has three roots. They are: $[(-0.7937005259840997+0.7937005259840998i), (-0.2905145555072513-1.0842150814913512i), (1.0842150814913512+0.2905145555072518i)]$
- Now let's take $arg(x)$ of each root: [2.356194490192345, -1.832595714594046, 0.26179938779914974]
- We see that $arg(x)$ of the 3rd root is equal to what we calculated for the right hand side in step (3) (0.26...) . Therefore, the correct root according to the convention is $1.0842150814913512+0.2905145555072518i$
Is there a better method? I am an engineer, not a mathematician, and I'm worried that perhaps I'm missing a much simpler (or at least more analytical) solution because I'm ignorant of some mathematical identity that would simplify everything.
Notes: I am calculating $arg(x)$ using Python's cmath.phase() function. This question is related to my previous question found here.

The Ting et al. paper that you cite promises, using the convention on p. 906, that if you use the argument $\pi/4$, then taking $\sqrt[3]{1+\mathrm{i}}$ to have argument $(1/3) \cdot \pi/4 = \pi/12$ (and, of course, magnitude $\sqrt[3]{\sqrt{1^2+1^2}} = \sqrt[6]{2}$, using the real cube and sixth root functions) selects the correct root for Legendre's formulas. Their convention works if the coefficients of the original cubic are all real. If the coefficients of the original cubic are not all real, the best method I've seen is to try all three roots in the solutions and see which choice of cube root gives an actual root of the polynomial -- expecting a formula for this is expecting too much. (You are testing at most three potential values. This is trivial computer time.)
As a numerical fact: it is too much to hope that a finite precision approximation to a root will give exactly zero (or even zero to a specified precision) when passed as an argument to the polynomial. You should either engage in sensitivity analysis to find out how (im-)precision in your approximate root leads to (im-)precision in the value of the polynomial evaluated at that approximate root or you should establish a small tolerance for the difference between the value of the polynomial and the expected value, zero.