static void Main(string[] args) { FloatingPoint a = new FloatingPoint(1186.25); FloatingPoint b = new FloatingPoint(-1185.10); FloatingPoint c = new FloatingPoint(1.15); Console.WriteLine(a.ToString()); Console.WriteLine(b.ToString()); Console.WriteLine(); Console.WriteLine(a.AddValues(b).ToString()); Console.WriteLine(c.ToString()); }
public FloatingPoint AddValues(FloatingPoint f) { FloatingPoint max = null, min = null, result = new FloatingPoint(); string carry; int shift = 0, temp = 0; if (BinaryCompare(this.Bias, f.Bias) == -1) { max = f; min = this; } else if (BinaryCompare(this.Bias, f.Bias) == 1) { max = this; min = f; } else if (BinaryCompare(this.Mantissa, f.Mantissa) == -1) { max = f; min = this; } else { max = this; min = f; } max.Mantissa = "1" + max.Mantissa; if (BinaryCompare(max.Bias, min.Bias) == 0) { min.Mantissa = "1" + min.Mantissa; } result.Sign = max.Sign; shift = BinaryToInt(Sub(max.Bias, min.Bias)); min.Mantissa = ShiftToRight(min.Mantissa, shift); min.Bias = max.Bias; if (max.Sign == min.Sign) { result.Mantissa = NSum(max.Mantissa, min.Mantissa, out carry); if (carry == "0") { result.Mantissa = result.Mantissa.Substring(1, MantissaLength); } else { result.Mantissa = result.Mantissa.Substring(0, MantissaLength); } result.Bias = NSum(max.Bias, carry, out carry); } else { result.Mantissa = Sub(max.Mantissa, min.Mantissa); if (result.Mantissa[0] == '0') { while (result.Mantissa[temp] != '1') { temp++; } } result.Mantissa = result.Mantissa.Substring(temp + 1); while (result.Mantissa.Length < MantissaLength) { result.Mantissa += "0"; } result.Bias = Sub(max.Bias, IntToBinary(temp)); } return(result); }