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(); }
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()); }