Example #1
0
        /// <summary>
        /// Переводит число в формат IEEE754
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public String Code(double num)
        {
            double number = num;                                       // Сохраняем число
            String sing   = ToBinarySign(num);                         // Находим знак числа

            number = Math.Abs(number);                                 // Избавляемся от знака

            String whole = "";                                         // Целая часть числа

            if (Math.Truncate(number) != 0)                            // Если целая часть != 0
            {
                whole = new BinaryCoder().Code(Math.Truncate(number)); // Переводим целую часть числа
                whole = GetWriteMantiss(whole);
            }

            String frac    = ToBinaryFrac(number - Math.Truncate(number), whole); // Переводим дробную часть числа
            String manitss = whole + frac;

            while (manitss.Length < _mantissCount)
            {
                manitss = "0" + manitss;
            }

            // Если целая часть равна нулю, то мантисса записана неправильно, переписываем
            if (Math.Truncate(number) == 0)
            {
                manitss = GetWriteMantiss(manitss);    // Сохраняем записываему мантиссу
            }
            int    shift = GetShift(num, whole, frac); // Считаем сдвиг мантиссы
            String exp   = ToBinaryExp(shift);         // Находим экспоненту

            return(sing + exp + manitss);
        }
Example #2
0
        public string Code(double num)
        {
            int    g    = (int)((num - _min) * (Math.Pow(2, _count) - 1) / (_max - _min)); // Вычисляем штуку
            String code = new BinaryCoder().Code(g);                                       // Кодируем в двоичный вид

            return(code);
        }
Example #3
0
        /// <summary>
        /// Находим экспоненту
        /// </summary>
        /// <param name="wh"></param>
        /// <param name="num"></param>
        /// <returns></returns>
        private string ToBinaryExp(int num)
        {
            // http://alexanderkobelev.blogspot.ru/2013/05/ieee-754.html?m=1

            String expS = "";

            int shift = Convert.ToInt32(Math.Pow(2, _expCount - 1) + (num) - 1);

            expS = new BinaryCoder().Code(shift);

            while (expS.Length < _expCount)
            {
                expS = "0" + expS;
            }

            return(expS);
        }
Example #4
0
        public double DeCode(string num)
        {
            double temp = new BinaryCoder().DeCode(num);

            return(temp * (_max - _min) / (Math.Pow(2, _count) - 1) + _min);
        }