Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;
            float fx1 = (float)6.5, fx2 = (float)2.5;
            IEEE  x1 = new IEEE((float)6.5);
            IEEE  x2 = new IEEE((float)2.5);

            Console.WriteLine("Введені числа: \nX1(" + fx1 + "): " + x1.ToString() + "\nX2(" + fx2 + "): " + x2.ToString());
            Console.WriteLine(Multiply(x1, x2));
            Console.ReadKey();
        }
Exemplo n.º 2
0
        static float Multiply(IEEE x1, IEEE x2)
        {
            uint sign = 0, exp = 0; ulong mantissa = 0;

            sign = (x1.Sign == x2.Sign) ? (uint)0 : 1;
            Console.WriteLine("Множимо знаки. Отримано: " + Convert.ToString(sign, 2));
            exp = x1.Exp + x2.Exp - 127;
            Console.WriteLine("Додаємо і нормалізуємо експоненти. Отримано: " + Convert.ToString(exp, 2));
            mantissa = (ulong)x1.Mantissa * (ulong)x2.Mantissa;
            Console.WriteLine("Множимо мантиси. Отримано: " + Convert.ToString((long)mantissa, 2));
            mantissa >>= 24;
            Console.WriteLine("Зсуваємо мантису на 24 знаки. Отримано: " + Convert.ToString((long)mantissa, 2));
            if (mantissa >> 23 == 1)
            {
                exp += 1;
                Console.WriteLine("Найзначиміший біт мантиси -- 1. Робимо поправку експоненти. Експонента: " + Convert.ToString(exp, 2));
            }
            IEEE iEEE = new IEEE(sign, exp, (uint)mantissa);

            Console.WriteLine(iEEE.ToString());
            return(iEEE.ToFloat());
        }