static void M_log_basic_iteration(BigNumber nn, BigNumber rr, int places)
        {
            BigNumber tmp0, tmp1, tmp2, tmpX;

            if (places < 360)
            {
                BigNumber.M_log_solve_cubic(nn, rr, places);
            }
            else
            {
                tmp0 = new BigNumber();
                tmp1 = new BigNumber();
                tmp2 = new BigNumber();
                tmpX = new BigNumber();

                BigNumber.M_log_solve_cubic(nn, tmpX, 110);
                BigNumber.Neg(tmpX, tmp0);
                BigNumber.Exp(tmp0, tmp1, (places + 8));
                BigNumber.Mul(tmp1, nn, tmp2);
                BigNumber.Sub(tmp2, BigNumber.One, tmp1);

                BigNumber.M_log_near_1(tmp1, tmp0, (places - 104));

                BigNumber.Add(tmpX, tmp0, tmp1);
                BigNumber.Round(tmp1, rr, places);
            }
        }