コード例 #1
0
        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 = new Complex64(1.0);
                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 ? Complex64.MakeReal(1.0) : Complex64.MakeReal(0.0));
            }
            else
            {
                double a      = real;
                double b      = imag;
                double powers = a * a + b * b;
                double arg    = Math.Atan2(b, a);
                double mul    = Math.Pow(powers, c / 2) * Math.Pow(Math.E, -d * arg);
                double common = c * arg + .5 * d * Math.Log(powers, Math.E);

                return(new Complex64(mul * Math.Cos(common), mul * Math.Sin(common)));
            }
        }