static public void Power(BigNumber xx, BigNumber yy, BigNumber rr, int places) { int iflag; BigNumber tmp8 = new BigNumber(); BigNumber tmp9 = new BigNumber(); int M_size_flag = BigNumber.GetSizeofInt(); if (yy.signum == 0) { BigNumber.Copy(BigNumber.One, rr); return; } if (xx.signum == 0) { BigNumber.SetZero(rr); return; } if (BigNumber.IsInteger(yy) > 0) { iflag = 0; if (M_size_flag == 2) /* 16 bit compilers */ { if (yy.exponent <= 4) { iflag = 1; } } else /* >= 32 bit compilers */ { if (yy.exponent <= 7) { iflag = 1; } } if (iflag > 0) { String sbuf = BigNumber.ToIntString(yy); int Exp = Convert.ToInt32(sbuf); BigNumber.IntPow(places, xx, Exp, rr); return; } } tmp8 = new BigNumber(); tmp9 = new BigNumber(); BigNumber.Log(xx, tmp9, (places + 8)); BigNumber.Mul(tmp9, yy, tmp8); BigNumber.Exp(tmp8, rr, places); }
static void Floor(BigNumber dst, BigNumber src) { BigNumber.Copy(src, dst); if (BigNumber.IsInteger(dst) > 0) { return; } if (dst.exponent <= 0) /* if |bb| < 1, result is -1 or 0 */ { if (dst.signum < 0) { BigNumber.Neg(BigNumber.One, dst); } else { BigNumber.SetZero(dst); } return; } if (dst.signum < 0) { BigNumber mtmp = new BigNumber(); BigNumber.Neg(dst, mtmp); mtmp.dataLength = mtmp.exponent; BigNumber.Normalize(mtmp); BigNumber.Add(mtmp, BigNumber.One, dst); dst.signum = -1; } else { dst.dataLength = dst.exponent; BigNumber.Normalize(dst); } }