Exemple #1
0
        public static int Compare(BiggerDouble left, BiggerDouble right)
        {
            int leftSign  = left.Sign;
            int rightSign = right.Sign;

            // Compare signs
            if (leftSign == 0 && rightSign == 0)
            {
                return(0);
            }

            if (leftSign >= 0 && rightSign < 0)
            {
                return(1);
            }

            if (leftSign < 0 && rightSign >= 0)
            {
                return(-1);
            }

            // Compare exponents
            if (left.Exp > right.Exp)
            {
                return(1);
            }

            if (left.Exp < right.Exp)
            {
                return(-1);
            }

            return(left.Value.CompareTo(right.Value));
        }
Exemple #2
0
        public static BiggerDouble Multiply(BiggerDouble left, BiggerDouble right)
        {
            BiggerDouble bd = new BiggerDouble(
                left.Value * right.Value,
                left.Exp + right.Exp);

            bd.Simplify();
            return(bd);
        }
Exemple #3
0
        public static BiggerDouble Abs(BiggerDouble value)
        {
            if (value.Sign < 0)
            {
                return(-value);
            }

            return(value);
        }
Exemple #4
0
        public static BiggerDouble Divide(BiggerDouble dividend, BiggerDouble divisor)
        {
            if (divisor == 0)
            {
                throw new DivideByZeroException();
            }

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

            bd.Simplify();
            return(bd);
        }
Exemple #5
0
 public static BiggerDouble operator+(BiggerDouble a, BiggerDouble b)
 {
     if (a.Exp == b.Exp)
     {
         BiggerDouble m = new BiggerDouble();
         m.Exp   = a.Exp;
         m.Value = a.Value + b.Value;
         m.Simplify();
         return(m);
     }
     else if (a.Exp > b.Exp)
     {
         // a is bigger
         Int256 deltaExp = a.Exp - b.Exp;
         if (deltaExp <= 16)
         {
             double       bX = b.Value / Math.Pow(10, (double)deltaExp);
             BiggerDouble m  = new BiggerDouble();
             m.Exp   = a.Exp;
             m.Value = a.Value + bX;
             m.Simplify();
             return(m);
         }
         else
         {
             return(a);
         }
     }
     else
     {
         // b is bigger
         Int256 deltaExp = b.Exp - a.Exp;
         if (deltaExp <= 16)
         {
             double       aX = a.Value / Math.Pow(10, (double)deltaExp);
             BiggerDouble m  = new BiggerDouble();
             m.Exp   = b.Exp;
             m.Value = b.Value + aX;
             m.Simplify();
             return(m);
         }
         else
         {
             return(b);
         }
     }
 }
Exemple #6
0
 public static BiggerDouble Subtract(BiggerDouble left, BiggerDouble right)
 {
     return(left - right);
 }
Exemple #7
0
 public static BiggerDouble Add(BiggerDouble left, BiggerDouble right)
 {
     return(left + right);
 }
Exemple #8
0
 public int CompareTo(BiggerDouble value)
 {
     return(Compare(this, value));
 }
Exemple #9
0
        public static int Compare(BiggerDouble left, object right)
        {
            if (right is BiggerDouble)
            {
                return(Compare(left, (BiggerDouble)right));
            }

            if (right is bool)
            {
                return(Compare(left, new BiggerDouble((bool)right)));
            }

            if (right is byte)
            {
                return(Compare(left, new BiggerDouble((byte)right)));
            }

            if (right is char)
            {
                return(Compare(left, new BiggerDouble((char)right)));
            }

            if (right is decimal)
            {
                return(Compare(left, new BiggerDouble((decimal)right)));
            }

            if (right is double)
            {
                return(Compare(left, new BiggerDouble((double)right)));
            }

            if (right is short)
            {
                return(Compare(left, new BiggerDouble((short)right)));
            }

            if (right is int)
            {
                return(Compare(left, new BiggerDouble((int)right)));
            }

            if (right is long)
            {
                return(Compare(left, new BiggerDouble((long)right)));
            }

            if (right is sbyte)
            {
                return(Compare(left, new BiggerDouble((sbyte)right)));
            }

            if (right is float)
            {
                return(Compare(left, new BiggerDouble((float)right)));
            }

            if (right is ushort)
            {
                return(Compare(left, new BiggerDouble((ushort)right)));
            }

            if (right is uint)
            {
                return(Compare(left, new BiggerDouble((uint)right)));
            }

            if (right is ulong)
            {
                return(Compare(left, new BiggerDouble((ulong)right)));
            }

            throw new ArgumentException();
        }