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)); } }