Пример #1
0
        public static MultiPrecision <N> EllipticE(MultiPrecision <N> k)
        {
            if (!k.IsFinite || k.Sign == Sign.Minus || k > One)
            {
                return(NaN);
            }

            if (k.IsZero)
            {
                return(PI / 2);
            }

            if (k == One)
            {
                return(One);
            }

            if ((1 - k).Exponent >= -32)
            {
                MultiPrecision <N> y = MultiPrecision <Plus1 <N> > .EllipticECore(
                    k.Convert <Plus1 <N> >(),
                    new Dictionary <MultiPrecision <Plus1 <N> >, MultiPrecision <Plus1 <N> > >()).Convert <N>();

                return(Max(One, y));
            }
            else
            {
                MultiPrecision <N> y = MultiPrecision <Double <N> > .EllipticECore(
                    k.Convert <Double <N> >(),
                    new Dictionary <MultiPrecision <Double <N> >, MultiPrecision <Double <N> > >()).Convert <N>();

                return(Max(One, y));
            }
        }