diff --git a/lib/function/arithmetic/sqrt.js b/lib/function/arithmetic/sqrt.js index 0e65fd92b..0035eb987 100644 --- a/lib/function/arithmetic/sqrt.js +++ b/lib/function/arithmetic/sqrt.js @@ -52,17 +52,28 @@ module.exports = function (math) { if (isComplex(x)) { var r = Math.sqrt(x.re * x.re + x.im * x.im); - if (x.im >= 0) { - return new Complex( - 0.5 * Math.sqrt(2.0 * (r + x.re)), - 0.5 * Math.sqrt(2.0 * (r - x.re)) - ); + + var re, im; + + if (x.re >= 0) { + re = 0.5 * Math.sqrt(2.0 * (r + x.re)); } else { - return new Complex( - 0.5 * Math.sqrt(2.0 * (r + x.re)), - -0.5 * Math.sqrt(2.0 * (r - x.re)) - ); + re = Math.abs(x.im) / Math.sqrt(2 * (r - x.re)); + } + + if (x.re <= 0) { + im = 0.5 * Math.sqrt(2.0 * (r - x.re)); + } + else { + im = Math.abs(x.im) / Math.sqrt(2 * (r + x.re)); + } + + if (x.im >= 0) { + return new Complex(re, im); + } + else { + return new Complex(re, -im); } }