Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Спец формат -> IEEE-754, не получается составить алгоритм 
:(
    Опции темы
chaos
Дата 23.9.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Код

               Числа     с   плавающей     точкой   являются    основным    способом представления
арифметической информации и занимают в памяти четыре подряд расположенных байта (в
порядке увеличения адреса):
•   байт 1 - увеличенный на десятичное 128 (т.е. на шестнадцатиричное 80) двоичный порядок;
•   байты 2,3,4 - 23-разрядная двоичная нормализованная мантисса со знаком в прямом коде, без
    скрытых разрядов. Знак числа содержится в старшем (седьмом) бите байта 2, равен “0” для
    положительных чисел и “1” для отрицательных. Байт 2 содержит наиболее значащие разряды, байт
    4 – наименее значащие. Числа нормализованные, и для всех чисел, кроме строгого нуля, шестой бит
    байта 2 содержит двоичную единицу.
        Диапазон представления примерно от 10-40 до 1040 с учетом знака; реальный диапазон,
обусловленный возможностями пакета арифметических операций и индикации на дисплее лицевой
панели -- до 223-1, т.е. до 8388607; точность представления 7-8 десятичных разрядов (всего, а не после
запятой!). В таком виде хранятся все мгновенные, средние и архивные параметры (кроме архивов
общих интегралов), арифметические константы описаний труб и датчиков.
        В перспективе для нового протокола предусмотрена возможность перекодировки данных в
стандартный формат коротких вещественных чисел FLOAT, принятый в ЭВМ типа IBM/PC, в стандарте
IEEE-754. Если при описании канала признак перекодировки не задан, все параметры с плавающей
точкой выдаются и принимаются по данному каналу во внутреннем представлении.
        Если задан признак перекодировки, то при выдаче             параметра  будет   производиться
преобразование в формат FLOAT (в порядке возрастания адреса):
•   Байт 1 – наименее значащие 8 разрядов мантиссы.
•   Байт 2 – следующие по значимости 8 разрядов мантиссы.
•   Байт 3 – разряды с 0-го по 6-й содержат наиболее значимые 7 разрядов мантиссы. Старший разряд
    байта содержит младший разряд порядка.
•   Байт 4 – разряды с 0-го по 6-й содержат старшие 7 разрядов порядка (увеличенного на десятичное
    128). Старший разряд содержит знак числа, «0» для положительных и «1» для отрицательных чисел.
        Мантисса FLOAT записана в прямом коде, в нормализованном виде. Самый старший разряд
мантиссы, всегда после нормализации равный «1», не хранится, т.е. подразумевается «скрытая
единица».


пытаюсь реализовать данные алгоритм, но пока все четно.
Код

float Dev2Ibm(const unsigned long& value)
{
    unsigned char order = (value & 0xFF000000) >> 24;
    bool sign = value & 0x00800000;
    unsigned long mantissa = value & 0x007FFFFF;

    unsigned long result = ((sign ? 1 : 0) << 31) | (order << 23);// + mantissa;
    return *(float *)&result;
}


есть парочка примеров:

85 65 72 B0 (25,362) -> 60 E5 CA 41 (IEEE-754 = 25.362)
8A 51 40 00 (650) -> 00 80 22 44 (IEEE-754 = 650)

Памажите!


Заранее благодарен!
ЗЫ голова не варит


Это сообщение отредактировал(а) chaos - 23.9.2008, 14:05
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.