Ejemplo n.º 1
0
        public static ComplexF Log(ComplexF a)
        {
            ComplexF result = ComplexF.Zero;

            if ((a.Real > 0.0f) && (a.Imaginary == 0.0f))
            {
                result.Real      = (float)System.Math.Log(a.Real);
                result.Imaginary = 0.0f;
            }
            else if (a.Real == 0.0f)
            {
                if (a.Imaginary > 0.0f)
                {
                    result.Real      = (float)System.Math.Log(a.Imaginary);
                    result.Imaginary = (float)MathFunctions.HalfPI;
                }
                else
                {
                    result.Real      = (float)System.Math.Log(-(a.Imaginary));
                    result.Imaginary = (float)-MathFunctions.HalfPI;
                }
            }
            else
            {
                result.Real      = (float)System.Math.Log(a.GetModulus());
                result.Imaginary = (float)System.Math.Atan2(a.Imaginary, a.Real);
            }

            return(result);
        }
Ejemplo n.º 2
0
        public static ComplexF Sqrt(ComplexF a)
        {
            ComplexF result = ComplexF.Zero;

            if ((a.Real == 0.0f) && (a.Imaginary == 0.0f))
            {
                return(result);
            }
            else if (a.Imaginary == 0.0f)
            {
                result.Real      = (float)System.Math.Sqrt(a.Real);
                result.Imaginary = 0.0f;
            }
            else
            {
                float modulus = a.GetModulus();

                result.Real      = (float)System.Math.Sqrt(0.5 * (modulus + a.Real));
                result.Imaginary = (float)System.Math.Sqrt(0.5 * (modulus + a.Real));
                if (a.Imaginary < 0.0)
                {
                    result.Imaginary = -result.Imaginary;
                }
            }

            return(result);
        }