Меню сайта

Урок 112. Представление данных с плавающей точкой

Для изображения чисел с плавающей точкой впроцессоре 8087
— — — существует три формата данных. — Два из них совпадают с предложенным
— — — ИИЭР стандартом для таких чисел. — Короткий формат имеет 32 бита, а
— — — длинный — 64 бита. — Третий формат определяет 80-битовые числа, и не
— — — совпадает со стандартом ИИЭР. — Сопроцессор 8087 использует такой
— — — формат «промежуточногодействительного числа», чтобы обеспечить
— — — очень высокую точность для промежуточныхрезультатов вычислений.

— — — — — Оставшаяся часть этого разделапредназначена для тех, кто не
— — — имел дела с вещественными числами вЭВМ. — Вы можете пропустить этот
— — — раздел, если понимаете о общих чертахспособы представления
— — — вещественных чисел — как на бумаге, так ив ЭВМ- а в следующем
— — — разделе мы рассмотрим конкретный способ,используемый в
— — — сопроцессоре 8087.

— — — — — Целые числа — лучший способ представлениямногих величин.
— — — Целые чила просто понимать и использовать,а также легко
— — — преобразовывать в двоичноепредставление. — Однако с целыми числами
— — — плохо работать в случае очень большихзначений. — Очень большое
— — — целое число обычно оканчивается длиннойстрокой нулей. — Например:
— — — Солнце находится на расстоянии около93000000 миль от Земли. — Целые
— — — числа, кроме того, не способны представитьзначение, содержащее
— — — дробную часть, то есть ЭВМ не можетзапомнить число 1/2 в целом
— — — представлении. — Любые другие дроби, меньшие 1, также невозможно
— — — представить, используя целые числа.

— — — — — Ученые и математики давным-давноразработали способ
— — — представления этих чисел в достаточноудобном виде. — На первом
— — — этапе вводится десяточная точка. — Этот символ, «.» показывает
— — — границу между целой и дробной частьючисла. — В случае целого числа
— — — позиция, представляющая единицы, всегданаходится на рпавом краю
— — — числа- в случае, когда используетсядесятичная точка, цифры справа
— — — от нее представляют значения, меньшиеединицы.

— — — — — У целых чисел каждая позиция числасоответствует степени 10.
— — — То есть число 1234 есть

— — — — — 1234=1000+200+30+4=1*10**3+2*10**2+3*10**1+4*10**0

— — — — — Десятичная точка показывает границу междупозицией,
— — — соответствующей 100, и дробнойчастью. — В дробной части позиции
— — — снова являются сиепенями 10, но теперь этистепени 10 —
— — — отрицательные. — Поэтому число 1.234 есть

— — — — — 1.234=1+0.2+0.03+0.004=
— — — — — — -1*10**0+2*10**-1+3*10**-2+4*10**-3

— — — — — Десятичная точка позволяет записыватьдроби. — Число 1/2 теперь
— — — выглядит как 1.5, а 1/4 выглядит как 0.25,и 1/5 выглядит как 0.2.

— — — — — Поскольку каждая позиция десятичного числаотличается от
— — — соседней на степень 10, умножение числа на10 эквивалентно сдвигу
— — — десятичной точки на одну позициювправо. — Аналогично деление на 10
— — — сдвигает десятичную точку на позициювлево. — Это свойсто можно
— — — использовать для сдвига десятичной точкина соответствующее место:
— — — мы сдвигаем десятичную точку иодновременно корректируем число на
— — — же степень 10. — Такое представление чисел называется представление
— — — «с плавающей точкой», посколькудесятичная точка «плавает» в числе-
— — — она больше не помечает абсолютное местомежду целой и дробной
— — — частями. -Положение десятичной точки можно выбрать из соображений
— — — удобства, а затем умножить число на нужнуюстепень 10, чтобы
— — — получить правильное значение.

— — — — — Например, Солнце находится на расстояниипримерно 93000000 миль
— — — от Земли. -С такой формой записи тяжело работать из-за обилия
— — — нулей. -Можно записать это число в формате с плавающей точкой:
— — — 9.3*107. -То есть 93000000 эквивалентно 9.3, умноженному на 10 в
— — — седьмой степени. — Фактически,

— — — — — 93000000=9.3*10**7=93*10**6=930*10**5

— — — — — и так далее. — Мы можем двигать десятичную точку куда угодно,
— — — меняя степень 10.

— — — — — Десятичное число с плавающей точкойсостоит из двух частей.
— — — Значащая часть числа называется мантиссой. — В предыдущем пример
е
— — — число 9.3 есть мантисса. — На практике мантисса обычно находится в
— — — пределах 1&lt-=мантисса&lt-10- т.е. — она может быть равна 1.3, 7.6 или
— — — 9.97. -Другая часть числа с плавающей точкой — это порядок,
— — — степень, в которую нужно возвести 10 передумножением его на
— — — мантиссу. -То есть 9.3*107 имеет мантиссу 9.3 и порядок 7. — — — Если
— — — основание системы счисления определено рази навсегда, в нашем
— — — случае это 10, то для восстановленияпервоначального числа должны
— — — быть заданы только два числа — мантисса ипорядок.

— — — — — Представление с плавающей точкой позволяетзаписявать в
— — — компактном виде как очень большие(например, 1.234*1085) так и
— — — очень малые (1.234*10-85) числа. — Чтобы записать те же числа без
— — — использования степени десяти,потребовались бы длинные строки,
— — — состоящие из нулей.

— — — — — Двоичные числа с плавающей точкойизображаются аналогично
— — — десятичным- отличие заключается в том, чтооснование системы
— — — счисления здесь 2, а не 10. — Мантисса имеет значение 1&lt-=мантисса&lt-2,
— — — а порядок показывает степень 2. — То есть число 1.101*10100 в
— — — двоичной форме означает, что мантисса1.101 умножается на 24, или
— — — 16. -Значение мантиссы определяется таким же позиционным способом,
— — — как и для десятичного числа, заисключением того, что основание
— — — теперь равно 2. — Позиции, находящиеся справа от двоичной точки,
— — — представляют отрицательные степени двойки. — Таблица на Фиг. 7.4
— — — показывает значения первых пяти позиций.

— — — — — Теперь мы можем вычислить десятичноезначение числа из примера:

— — — — — 1.101b=1+1/2+1/8=15/8=1.625
— — — — — 10**100b=2**4=16
— — — — — 1.101*10**100B = (1+5/8)*16 = 26
— — — — — Кроме того, мы могли бы вычислить этозначение точно так же,
— — — как в случае десятичных чисел. — Значение порядка показывает, на
— — — сколько позиций надо сдвинуть двоичнуюточку. — В этом случае,
— — — поскольку значение порядка равно 4,двоичную точку надо сдвинуть на
— — — четыре позиции вправо. — Поэтому

— — — — — 1.101*10**100B=11010B=26

— — — — — Оба метода правильные и дают идентичныерезультаты. — В первом
— — — случае вычисляется мантисса, затем онаумножается на основание,
— — — возведенное в степень порядка- во второмслучае сначала выполняется
— — — умножение, а затем вычисляется мантисса.

— — — — — Двоичное значение — — Десятичное значение
— — — ———————————————
— — — — — 0.1 — — — — — — — — — — — — — 1/2
— — — — — 0.01 — — — — — — — — — — — — 1/4
— — — — — 0.001 — — — — — — — — — — — 1/8
— — — — — 0.0001 — — — — — — — — — — — — — — — — 1/16
— — — — — 0.00001 — — — — — — — — -1/32
— — — — ——————————————Фиг. 7.4 Отрицательные
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — степени двух

— — — — — Как же эти числа представляются в ЭВМ? — — — Место, отводимое для
— — — числа с плавающей точкой, делится на дваполя. — Одно поле содержит
— — — знак и значение мантиссы, а другоесодержит знак и значение
— — — порядка. -Размер поля мантиссы определяет точность представления
— — — числа. -Чем большее число бит отводится в ЭВМ под поле мантиссы,
— — — тем выше точность. — Например, десятичная мантисса 1.234 более
— — — точная, чем мантисса 1.2. — Две дополнительные цифры мантиссы дают
— — — возможность более точно передаватьзначение числа.

— — — — — Для того, чтобы сохранить максимальнуюточность, вычислительные
— — — машины почти всегда хранят мантиссу внормализованном виде. — Это
— — — означает, что мантисса есть число, лежащеемежду 1 и 2
— — — (1&lt-=мантисса&lt-2). — Два соображения говорят в пользунормализации.
— — — Во-первых, ни один незначащий нуль не даетникакого вклада в
— — — точность числа. — (Это несправедливо для нулей, лежащих в конце
— — — числа- мы считаем, что число 1.000 болееточно, чем число 1.0).
— — — Если в мантиссе с плавающей точкойпоявились незначащие нули,
— — — точность числа падает. — Во-вторых, способ хранения мантиссы с

— — плавающей точкой подразумевает, чтодвоичная точка находится на
— — — фиксированном месте. — Фактически подразумевается, что двоичная
— — — точка следует после первой двоичной цифры. — То есть нормализация
— — — мантиссы делает единичным первый бит,помещая тем самым значение
— — — мантиссы между 1 и 2. — Для выполнения нормализации ЭВМ корректирует
— — — порядок числа на соответствующее значение.

— — — — — При нормализации встречаютсяисключения. — Наиболее очквидное
— — — исключение — нуль. — В этом случае вся мантисса нулевая. — Второе
— — — исключение не так очевидно, и возникает вслучае приближения числа
— — — к нижней границе своего диапазона. — — — Давайте разберемся, что это
— — — означает.
— — — — — Точно так же, как длина мантиссы числаопределяет его точность,
— — — длина поля порядка определяет диапазончисла. — Поле порядка
— — — содержит степень двойки, и чем больше битв этом поле, тем большее
— — — число может быть представлено.

— — — — — Если под поле порядка (представленного вдополнительном коде)
— — — отведено три двоичных цмфры, наибольшеепредставимое число есть
— — — 1.111 … -* 10011B. — Мантисса — это число,чуть меньше двух, а
— — — множитель мантиссы равен 23, или 8. — Поэтому максимальное число
— — — чуть меньше 16. — Наименьшее ненулевое положительное число есть
— — — 1.000 … -* 10100B, или 1*2-4, или 1/16. -Поскольку в числах с
— — — плавающей точкой для представлениямантиссы не используется
— — — дополнительный код, диапазон отрицательныхчисел такой же. — — — В
— — — случае 3-битового порядка диапазонположительных чисел от 1/16 до
— — — 16, а отрицательных — от -16 до -1/16.

— — — — — Если для поля порядка используется 4 бита,наибольшее число
— — — равно 1.111… — *100111B&lt-2*27=256. — — — Наименьшеененулевое
— — — положительное число 1.000… — *101000B=1*2-8=1/256. — Таким образом
— — — четыре бита порядка допускают диапазонизменения чисел от 1/256 до
— — — 256. -Чем большее число бит в поле порядка, тем шире диапазон
— — — представимых чисел.

— — — — — Важно отметить, что хотя диапазон ирасширяется с увеличением
— — — числа бит порядка, точность неувеличивается. — В только что
— — — рассмотренных примерах предполагалось, чтоимеется 4 бита мантиссы.
— — — Если выбрать конкретное число, попадающеев диапазон обоих
— — — примеров, то оно будут иметь одну и ту жеточность независимо от
— — — диапазона порядка. — Например, число 1.010*10001B=21/2. -Увеличение
— — — количества бит порядка не увеличиваетточность числа. — Размер
— — — мантиссы есть единственное ограничениеточности данного числа в
— — — пределах системы.

— — — — — Значение порядка хранится не как число,представленное в
— — — дополнительном коде. — Для упрощения вычислений значение порядка в
— — — ЭВМ хранится в виде смещенного числа. — Это означает, что к
— — — действительному значению порядкаприбавляется смещение перед
— — — записью его в память. — Смещенным значение порядка делается для
— — — того, чтобы можно было сравнивать значенияпорядка с помощью
— — — обычной операции сравнения чисел сфиксированной точкой без знака.
— — — В частности, это полезно при сравнениидвух чисел с плавающей
— — — точкой. -Значения порядка и мантиссы записываются в одном элементе
— — — данных, причем порядок записывается передмантиссой. — В случае
— — — смещенного значения порыдка программаможет сравнивать числа
— — — побитно, начиная со старших позиций. — Первое же неравенство
— — — показывает соотношение чисел, и больше ненужно учитывать никакие
— — — части чисел. — Значение смещения определяется размером поля порядка.
— — — Давайте это рассмотрим на примере форматовданных сопроцессора
— — — 8087.

— — — — — В сопроцессоре 8087 формат короткогодействительного числа
— — — использует 32 бита, восемь из которыхсодержат значение порядка-
— — — таким образом, оно может находиться впределах от — 128 до 127.
— — — Однако значение -128 зарезервировано дляобозначения некоторого
— — — специального, а именно, неопределенногочисла, так что значения
— — — порядка находятся в диапазоне от -127 до127. — Значение порядка —
— -&nbs
p- это не число, представленное вдополнительном коде. — Сопроцессор
— — — 8087 прибавляет значение смещения 127 кзначению порядка
— — — действительного числа перед тем, как егозапомнить.

— — — — — Значение порядка — Хранимое значение
— — — — — —————————————
— — — — — —127 — — — — — — — — — — — — 000H
— — — — — — —1 — — — — — — — — — — — — 07EH
— — — — — — — -0 — — — — — — — — — — — — 07FH
— — — — — — — -1 — — — — — — — — — — — — 080H
— — — — — -127 — — — — — — — — — — — — 0FEH
— — — — — ————————————-Фиг. 7.5 Хранение порядка

— — — — — В таблице на Фиг. 7.5 показаны некоторыевозможные значения
— — — порядка и его запоминаемое значение. — Как видно из рисунка,
— — — смещение меняет содержимое поля порядкатак, чтобы наименьшему
— — — значению порядка соответствовалонаименьшее действительное число-
— — — аналогично, наибольшему значению порядкасоответствовало наибольшее
— — — число. -Если два числа с плавающей точкой различаются значением
— — — порядка, простое сравнение полей порядкаупорядочивает оюа числа.
— — — Поскольку такое сравнение можно продолжатьи дальше с полями
— — — мантисс, программа может легко сравнитьдва числа с плавающей
— — — точкой. -И вся эта простота — только благодаря смещению порядка.

Категория: Программирование на Ассемблере | Дата: 18.03.13

Меню раздела
Блок