nthRoot method

Complex nthRoot(
  1. int nth
)

Computes the complex n-th root of this object. The returned root is the one with the smallest positive argument.

Implementation

Complex nthRoot(int nth) {
  var a = 0.0;
  var b = 0.0;
  var neg = false;
  var n = nth;

  if (n < 0) {
    n = -n;
    neg = true;
  }

  if (n == 0) {
    a = 1;
    b = 0;
  } else {
    if (n == 1) {
      a = real;
      b = imaginary;
    } else {
      var length = abs();
      var angle = phase();

      if (angle < 0) {
        angle += math.pi * 2;
      }

      length = math.pow(length, 1.0 / n) as double;
      angle = angle / n;

      a = length * math.cos(angle);
      b = length * math.sin(angle);
    }
  }

  if (neg) {
    final den = a * a + b * b;
    a = a / den;
    b = -b / den;
  }

  return Complex(a, b);
}