Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
 /// <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;
 }
Ejemplo n.º 4
0
 /// <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);
 }
Ejemplo n.º 5
0
 /// <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);
 }
Ejemplo n.º 6
0
 /// <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);
     }
 }
Ejemplo n.º 7
0
 /// <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
         });
     }
 }