Beispiel #1
0
        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());
        }
Beispiel #2
0
        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);
        }