/// <summary> /// Returns the amount of deficit /// </summary> /// <param name="num2">Value</param> public double AmountOfDeficit(LDouble num2) { double current = Current - num2.Current; double toReturn = 0; double limit = Limit == 0 ? 1 : Limit; if (IncreasableAmount != 0) { while (current < 0) { toReturn++; DecreaseLimit(ref limit); current += limit; } } else { while (current < 0) { toReturn++; current += limit; } } return(toReturn); }
/// <summary> /// Returns the amount of overflowing the limit /// </summary> /// <param name="num2">Value</param> /// <returns></returns> public double AmountOfOverFlow(LDouble num2) { double current = Current + num2.Current; double toReturn = 0; double limit = Limit == 0 ? 1 : Limit; if (current >= limit && !AllowToOverFlow) { return(1); } if (IncreasableAmount != 0) { while (current >= limit) { toReturn++; current -= limit; IncreaseLimit(ref limit); } } else { while (current >= limit) { toReturn++; current -= limit; } } return(toReturn); }
/// <summary> /// Standart constructor /// </summary> /// <param name="example">LDouble value</param> public LDouble(LDouble example) { Limit = example.Limit; Current = example.Current; IsMultiplicator = example.IsMultiplicator; IncreasableAmount = example.IncreasableAmount; AllowToOverFlow = example.AllowToOverFlow; }
/// <summary> /// Returns bool value of deficit /// </summary> /// <param name="num2">Value</param> /// <returns></returns> public bool IsDeficit(LDouble num2) { if (Current - num2.Current < 0) { return(true); } return(false); }
/// <summary> /// Returns bool value of overflowing /// </summary> /// <param name="num">Value</param> /// <returns></returns> public bool IsOverflow(LDouble num) { if (Current + num.Current >= Limit) { return(true); } return(false); }
/// <summary> /// increase value with return, where "true" is overflow /// </summary> /// <param name="num">Value</param> /// <returns></returns> public bool AddValue(LDouble num) { if (IsOverflow(num)) { LDouble temp = Addition(this, num); Limit = temp.Limit; Current = temp.Current; return(true); } else { Current += num.Current; return(false); } }
/// <summary> /// Instead of operator "+" /// </summary> /// <param name="num1">First number</param> /// <param name="num2">Second number</param> /// <returns></returns> private static LDouble Addition(LDouble num1, LDouble num2) { if (num1.Current + num2.Current >= num1.Limit) { if (!num1.AllowToOverFlow) { return(new LDouble(num1) { Current = num1.Limit, Limit = num1.Limit }); } double limit = num1.Limit; double current = num1.Current + num2.Current - limit; if (num1.IncreasableAmount != 0) { num1.IncreaseLimit(ref limit); } while (current >= limit) { current -= limit; if (num1.IncreasableAmount != 0) { num1.IncreaseLimit(ref limit); } } return(new LDouble(num1) { Current = current, Limit = limit }); } else { return(new LDouble(num1) { Current = num1.Current + num2.Current }); } }