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)); }
public static BiggerDouble Multiply(BiggerDouble left, BiggerDouble right) { BiggerDouble bd = new BiggerDouble( left.Value * right.Value, left.Exp + right.Exp); bd.Simplify(); return(bd); }
public static BiggerDouble Abs(BiggerDouble value) { if (value.Sign < 0) { return(-value); } return(value); }
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); }
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); } } }
public static BiggerDouble Subtract(BiggerDouble left, BiggerDouble right) { return(left - right); }
public static BiggerDouble Add(BiggerDouble left, BiggerDouble right) { return(left + right); }
public int CompareTo(BiggerDouble value) { return(Compare(this, value)); }
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(); }