複素数の平方根

Java複素数を扱いたくて、その平方根を計算させるためにどうするのが一番良いか、と考えていたときに思いついたことをメモしておきます。
a+bi(a,b\in\mathbb{R}) を与えられた複素数として (x+yi)^2=a+bi が成り立つように実数 x , y を定めるには、連立方程式
\left\{\begin{eqnarray}x^2-y^2&=&a\\2xy&=&b\end{eqnarray}\right.
を解けばよい。しかるに -x^2y^2=-\frac{b^2}{4} であるから、x^2,-y^2二次方程式
t^2-at-\frac{b^2}{4}=0
の解である。そしてこれを実際に解くと
t=\frac{a\pm\sqrt{a^2+b^2}}{2}
だが、x^2\geq 0,-y^2\leq 0 だから
x^2=\frac{a+\sqrt{a^2+b^2}}{2},-y^2=\frac{a-\sqrt{a^2+b^2}}{2}
が成り立ち、したがって
x=\pm\sqrt{\frac{\sqrt{a^2+b^2}+a}{2}},y=\pm\sqrt{\frac{\sqrt{a^2+b^2}-a}{2}}
となるが、xy=\frac{b}{2} に注意すると組み合わせとしては
\left\{\begin{array}x=\sqrt{\frac{\sqrt{a^2+b^2}+a}{2}},&y=\sqrt{\frac{\sqrt{a^2+b^2}-a}{2}}\\x=-\sqrt{\frac{\sqrt{a^2+b^2}+a}{2}},&y=-\sqrt{\frac{\sqrt{a^2+b^2}-a}{2}}\end{array}\right.
のみが考えられる。したがって
\sqrt{a+bi}=\pm\left(\sqrt{\frac{\sqrt{a^2+b^2}+a}{2}}+\sqrt{\frac{\sqrt{a^2+b^2}-a}{2}}i\right)
となる。