public static IdleCurrency Multiply(IdleCurrency left, IdleCurrency right)
        {
            IdleCurrency bd = new IdleCurrency(
                left.Value * right.Value,
                left.Exp + right.Exp);

            bd.Simplify();
            return(bd);
        }
        public static IdleCurrency Divide(IdleCurrency dividend, IdleCurrency divisor)
        {
            if (divisor == 0)
            {
                throw new DivideByZeroException();
            }

            IdleCurrency bd = new IdleCurrency(
                dividend.Value / divisor.Value,
                dividend.Exp - divisor.Exp);

            bd.Simplify();
            return(bd);
        }
 public static IdleCurrency operator +(IdleCurrency a, IdleCurrency b)
 {
     if (a.Exp == b.Exp)
     {
         IdleCurrency m = new IdleCurrency();
         m.Exp   = a.Exp;
         m.Value = a.Value + b.Value;
         m.Simplify();
         return(m);
     }
     else if (a.Exp > b.Exp)
     {
         // a is bigger
         int deltaExp = a.Exp - b.Exp;
         if (deltaExp <= 16)
         {
             double       bX = b.Value / Math.Pow(10, (double)deltaExp);
             IdleCurrency m  = new IdleCurrency();
             m.Exp   = a.Exp;
             m.Value = a.Value + bX;
             m.Simplify();
             return(m);
         }
         else
         {
             return(a);
         }
     }
     else
     {
         // b is bigger
         int deltaExp = b.Exp - a.Exp;
         if (deltaExp <= 16)
         {
             double       aX = a.Value / Math.Pow(10, (double)deltaExp);
             IdleCurrency m  = new IdleCurrency();
             m.Exp   = b.Exp;
             m.Value = b.Value + aX;
             m.Simplify();
             return(m);
         }
         else
         {
             return(b);
         }
     }
 }