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