public static Complex64 Plus(Complex64 x) { return +x; }
public Complex64 Power(Complex64 y) { double c = y.real; double d = y.imag; int power = (int)c; if (power == c && power >= 0 && d == .0) { Complex64 result = One; if (power == 0) return result; Complex64 factor = this; while (power != 0) { if ((power & 1) != 0) { result = result * factor; } factor = factor * factor; power >>= 1; } return result; } else if (IsZero) { return y.IsZero ? One : Zero; } else { double a = real; double b = imag; double powers = a * a + b * b; double arg = System.Math.Atan2(b, a); double mul = System.Math.Pow(powers, c / 2) * System.Math.Exp(-d * arg); double common = c * arg + .5 * d * System.Math.Log(powers); return new Complex64(mul * System.Math.Cos(common), mul * System.Math.Sin(common)); } }
public static Complex64 Negate(Complex64 x) { return -x; }
public static Complex64 Divide(Complex64 x, Complex64 y) { return x / y; }
public static Complex64 Multiply(Complex64 x, Complex64 y) { return x * y; }
public static Complex64 Subtract(Complex64 x, Complex64 y) { return x - y; }
public static Complex64 Add(Complex64 x, Complex64 y) { return x + y; }