/// <summary>
        /// e. g. Pow(2, 5) = 32
        /// </summary>
        /// <param name="base">
        /// The base of the exponential, base^power
        /// </param>
        /// <param name="power">
        /// The power of the exponential, base^power
        /// </param>
        /// <returns></returns>
        public static ComplexNumber Pow(Number @base, Number power)
        {
            // TODO: make it more detailed (e. g. +oo ^ +oo = +oo)
            if (power.IsInteger())
            {
                return(Functional.Downcast(Functional.BinaryIntPow(@base as ComplexNumber, power.AsInt())) as ComplexNumber);
            }
            var baseCom  = @base.AsComplexNumber();
            var powerCom = power.AsComplexNumber();

            if (baseCom.IsDefinite() && powerCom.IsDefinite())
            {
                try
                {
                    return(Functional.Downcast(
                               Complex.Pow(baseCom.AsComplex(), powerCom.AsComplex())
                               ) as ComplexNumber);
                }
                catch (OverflowException)
                {
                    return(RealNumber.NaN());
                }
            }
            else
            {
                return(ComplexNumber.Indefinite(RealNumber.UndefinedState.NAN));
            }
        }