private void ZetaInv(double taup, double lam, out double u, out double v)
        {
            double
                psi  = Asinh(taup),
                scal = 1 / Hypot(1, taup);

            if (ZetaInv0(psi, lam, out u, out v))
            {
                return;
            }
            var stol2 = tol2_ / Sq(Max(psi, 1));

            // min iterations = 2, max iterations = 6; mean = 4.0
            for (int i = 0, trip = 0; i < numit_ || GEOGRAPHICLIB_PANIC; ++i)
            {
                _Eu.Sncndn(u, out var snu, out var cnu, out var dnu);
                _Ev.Sncndn(v, out var snv, out var cnv, out var dnv);

                Zeta(u, snu, cnu, dnu, v, snv, cnv, dnv, out var tau1, out var lam1);
                DwdZeta(u, snu, cnu, dnu, v, snv, cnv, dnv, out var du1, out var dv1);

                tau1 -= taup;
                lam1 -= lam;
                tau1 *= scal;
                double
                    delu = tau1 * du1 - lam1 * dv1,
                    delv = tau1 * dv1 + lam1 * du1;
                u -= delu;
                v -= delv;
                if (trip != 0)
                {
                    break;
                }
                var delw2 = Sq(delu) + Sq(delv);
                if (!(delw2 >= stol2))
                {
                    ++trip;
                }
            }
        }