Поиск:

Ответ в темуСоздание новой темы Создание опроса
> еще о вводе-выводе вещественных, еще о вводе-выводе вещественных 
:(
    Опции темы
zz113
Дата 24.1.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.1.2008

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



Не умею пользоваться этим извините, вопрос такой: при переводе вещественных туда-обратно по известным логорифмическим формулам 
(10^(X) = 2^(X * LOG2(10)) и т.д.)возникают  ошибки округления, в последних знаках, которые иногда очень не приятны. На пример ассемблер идеально компилирует dt 1.e123, а лог. формулы не совсем, т.е. как создать в памяти 10 байтовое число 1.e123, 2-ая мантисса, смещенный порядок, 
также, как это делает компилятор.
PM MAIL   Вверх
Mikl_
Дата 29.1.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



zz113
Не понял вопрос? Как вручную перевести вещественное число в hex?
Вещественные числа в памяти компьютера хранятся в нормализованном виде, то есть оно обязательно должно иметь следующий вид: S*M*2^P, где S — знак (+1|-1), M — двоичная мантисса числа, P — порядок двоичного числа. Из-за того, что старший разряд двоичной ман­тиссы всегда равен 1, его предпочитают «хранить в уме» и не занимать ме­сто в памяти. Для упрощения вычислений значе­ние порядка хранят не в дополнительном, а в смещенном коде. В смещенном коде число суммируется с константой, которая для N-битного кода равна 2^(N-1)-1. Т.е. для REAL4 -127=0h, ..., -1=7Eh, 0=7Fh, 1=80h, ..., 128=0FFh. Вещественные числа могут быть 32-битовыми, 64-битовыми и 80-битовыми (REAL4, REAL8 и REAL10 соответственно). При переводе десятичного вещественного в hex отдельно переводим целую и дробную части: 193,75=128+64+1+1/2+1/4=11000001,11b=1,100000111b*2^7=4341C000h
Преобразуем число 4341C000h в бинарное представление
0-100.0011.0-100.0001.1100.0000.0000.0000
0(Знак числа "+"=0,"-"=1)-10000110(Порядок =+7 в смещенном коде)-(1),10000011100000000000000b(мантисса числа)
переведем pi=3,1415926535897932384626433832795 в hex 
1) переводишь в hex раздельно дробную и целую части
3,1415926535897932384626433832795 с целой частью все понятно 3
0,1415926535897932384626433832795*16=2,265482457436691815402294132464 первая цифра после запятой 2
0,265482457436691815402294132464*16=4,247719318987069046436706119424 вторая цифра 4
0,247719318987069046436706119424*16=3,963509103793104742987297910784 третья цифра 3
0,963509103793104742987297910784*16 и так далее
получилось 3,243...hex =0011,0010 0100 0011bin=1,1001 0010 0001*2^1
переводим bin в нормализованный вид 0011,0010 0100 0011bin=1,1001 0010 0001*2^1

REAL4 - 40490FDBh, REAL8 - 400921FB54442D18h, REAL10 - 4000C90FDAA22168C233h
бит|тип        |знак |поле порядка|константа       |поле мантиссы
32 |REAL4  |1 бит|8 бит                 |2^7-1=127       |23 бита
64 |REAL8  |1 бит|11 бит               |2^10-1=1023   |52 бита
80 |REAL10|1 бит|15 бит              |2^14-1=16383|64 бита

404CCCCD=0-100.0000.0-100.1100.1100.1100.1100.1101=
=(1),100.1100.1100.1100.1100.1101*2^1=11,00110011001100110011001



PM MAIL   Вверх
ksili
Дата 26.2.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 1
Всего: 17



Цитата(Mikl_ @  29.1.2008,  16:04 Найти цитируемый пост)
Вещественные числа в памяти компьютера хранятся в нормализованном виде

Ну вроде бы числа близкие к нулю автоматически преобразуются в денормализованный вид. Так больше точность получается


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




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


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

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