Beispiel #1
0
        /// <summary>
        /// Adds two IEEE format numbers.
        /// </summary>
        /// <param name="firstNumber"></param>
        /// <param name="secondNumber"></param>
        /// <returns></returns>
        /// <see cref="https://www.tutorialspoint.com/computer_logical_organization/binary_arithmetic.htm"/>
        public string Add(string[] numbers)
        {
            StringManipulation manipulationObject = new StringManipulation();

            string[]      equalLengthNumbers = manipulationObject.MakeEqualLength(numbers);
            ValueEnum     sumEnum;
            StringBuilder firstNumberBuilder = new StringBuilder(manipulationObject.ReverseString(numbers[0]));
            StringBuilder secondNumberBuilder = new StringBuilder(manipulationObject.ReverseString(numbers[1]));
            StringBuilder sumBuilder = new StringBuilder();
            int           sum = 0, carry = 0;
            int           index = 0;

            for (int i = 0; i < firstNumberBuilder.Length; i++)
            {
                if (firstNumberBuilder[i] == '.' || secondNumberBuilder[i] == '.')
                {
                    index = i;
                    continue;
                }

                sum     = firstNumberBuilder[i] + secondNumberBuilder[i] + carry - 96;
                sumEnum = (ValueEnum)sum;
                switch (sumEnum)
                {
                case ValueEnum.ZERO:
                    sum = 0; carry = 0;
                    break;

                case ValueEnum.ONE:
                    sum = 1; carry = 0;
                    break;

                case ValueEnum.TWO:
                    sum = 0; carry = 1;
                    break;

                case ValueEnum.THREE:
                    sum = 1; carry = 1;
                    break;
                }

                sumBuilder.Append(sum);
            }
            if (carry == 1)
            {
                sumBuilder.Append(carry);
            }
            sumBuilder.Insert(index, '.');

            return(manipulationObject.ReverseString(sumBuilder.ToString()));
        }
        /// <summary>
        /// Converts a binary number to floating point number.
        /// </summary>
        /// <param name="number"></param>
        public float BinaryToFloat(string number)
        {
            StringManipulation stringIndex = new StringManipulation();
            int index = stringIndex.IndexOf(number, '.');

            string partOneNumber = stringIndex.Substring(number, 0, index);
            string partTwoNumber = stringIndex.Substring(number, index + 1, number.Length - index - 1);

            float integralPart = Convert.ToInt32(partOneNumber, 2);
            int   iterator;
            float fractionalPart = 0;

            for (iterator = 0; iterator < partTwoNumber.Length - 1; iterator++)
            {
                fractionalPart += (float)((partTwoNumber[iterator] - 48) / Math.Pow(2, iterator + 1));
            }
            return(integralPart + fractionalPart);
        }