public static HugeNumber operator -(HugeNumber a, HugeNumber b) { HugeNumber num = new HugeNumber(a); num.Substract(b); return(num); }
public void Divide(HugeNumber num) { if (num.IsZero) { throw new System.Exception(string.Format("{0} divided by 0 or null was not allowed.", this)); } if (IsZero) { return; } if (CompareAbsTo(num) < 0) { Reset(); return; } mNegative = mNegative ^ num.mNegative; HugeNumber tmp = new HugeNumber(this); tmp.Abs(); HugeNumber div = new HugeNumber(num); div.Abs(); Reset(); HugeNumber sum = Zero; while (tmp.CompareTo(div) >= 0) { int mov = tmp.mOffset - div.mOffset; div.MoveLeft(mov); if (tmp.CompareTo(div) < 0) { mov--; div.MoveRight(1); } tmp.Substract(div); if (tmp.CompareTo(Zero) >= 0) { sum.SetABit(mov); Add(sum); div.MoveRight(mov); } else { break; } } }