Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Архитектура вычислительных систем и Ассемблер с приложением методических указаний к лабораторным работам. Учебное пособие
.pdf
2.8. Представление вещественных чисел 91
причём˘X и x записываются одной и той же комбинацией бит.
В некоторых вычислительных машинах работа с числами с фиксированной
запятой реализована аппаратно. При этом отрицательные числа часто кодируются
как значение со знаком.
Если специального набора команд нет, арифметика с фиксированной запятой
может быть реализована программно с использованием целочисленных команд.
Сложение и вычитание чисел с фиксированной запятой можно выполнять целочисленным сумматором без коррекции результата:
x
y
˘
X +˘Y =
+
n
2
x + y
=
n
2
n
2
(2.76)
После целочисленного умножения требуется коррекция в виде деления результата
на 2n:
˘
X ·˘Y =
y
x
·
n
2
x · y
=
n
2
2
2n
x·y
n
2
=
n
2
(2.77)
после целочисленного деления потребовалась бы коррекция в виде умножения
результата на 2n, если бы этот результат был вещественным:
x
X
x
˘
=
˘
Y
x
n
2
y
n
2
=
=
y
n
· 2
y
n
2
(2.78)
но коррекция целочисленного частного умножением даст нулевые значения младшихnбит, то есть дробной части числа с фиксированной запятой, что неправильно.
Поэтому необходимо проводить коррекцию перед делением:
X
Y
В случае, если используемая разрядность не позволяет умножить делимое на
y
=
˘
n
2
(2.79)
2nбез
n
x·2
˘
переполнения, можно воспользоваться тем, что целочисленное деление возвращает
результат в виде двух целых чисел — частного q и остатка r:
x
y
= q +
r
y
(2.80)
Тогда корректное частное чисел в представлении с фиксированной запятой с дробной частью длины n равно:
x
y
Умножение и деление на
· 2
n
=q +
r
n
· 2
y
= q · 2n+
2nможет быть выполнено при помощи битовых сдвигов,
r · 2
y
n
(2.81)
что практически не замедлит работу.
Таким образом, представление с фиксированной запятой позволяет представить числа в малом диапазоне с ограниченной абсолютной погрешностью и позволяет использовать для арифметических действий над вещественными числами
быстрые целочисленные и логические операции.

92 Глава 2. Представление данных
2.8.2. Представление вещественных чисел с плавающей запятой
И наш Ефрем, не видя дальше носа,
Упал с откоса
И вмиг остался без хвоста...
Б. Б. Гребенщиков. Басня №1
В основе представления вещественных чисел с плавающей запятой лежит экспоненциальный (научный) формат:
p
X = N
· μ (2.82)
гдеN— основание системы счисления (в современных ЭВМ
арифметики с плавающей точкой IEEE 754 [
N =10),μ
называется мантиссой числаX, целое числоp— порядком (иногда
13,14,87
] описывает также случай
N =2
, стандарт
из-за английского exponent используется термин «экспонента», но он не принят
в отечественной литературе).
В настоящее время чаще всего, кроме порядка и мантиссы, отделяется ещё
и знак числа:
В форме
(2.83)
X =(−1)
можно представить любое конечное вещественное число, но не
s
· Np· μ, s ∈{0, 1},p ∈ Z,μ 0 (2.83)
единственным способом:
512,12 = 512,12 · 10
0
= 51212 · 10−2=51,212 · 101=0,051212 · 10
4
Представление (2.83) называется нормализованным, если 0,1N μ<1:
s
X =(−1)
В нормализованной форме
число, кроме нуля, причём единственным образом. В частности,
3
. В двоичной системе счисления то же самое число и его нормализованное
10
экспоненциальное представление записываются как
0,10000000000001111 ...· 2
· Np· μ, s ∈{0, 1},p ∈ Z, 0,1N μ<1 (2.84)
(2.84)
можно представить любое конечное вещественное
512,12 = 0,51212 ·
1000000000,0001111 ... =
9
.
Найдём порядок нормализованного представления числа X:
|X| =logN(Np· μ)=p +logNμ (2.85)
log
N
так что p =log
|X|−logNμ. Так как 0,1N μ<1,то−1 logNμ<0:
N
|X| <p logN|X| +1 (2.86)
log
N
с учётом того, что p ∈ Z, получаем
p =log
|X| +1
N
(2.87)

2.8. Представление вещественных чисел 93
Если записать мантиссу нормализованного представления числаXв позиционной форме, получим
μ =
0,m1m2m3m4..., m1=0. (2.88)
где
mi∈{0, 1,...N − 1}
запятой до определённого знака округляется дробная часть числа
— цифры. Если для представления с фиксированной
X
(что даёт
ограниченную абсолютную погрешность), то для представления с плавающей запятой до определённой длины округляется мантисса (что приводит к ограниченной
относительной погрешности округления).
Структура двоичного числа с плавающей запятой согласно IEEE 754
Представим вещественное число
ме (2.83)
X =(−1)
s
· 2p· μ, s ∈{0, 1},p∈ Z, 0,12 μ<1 (2.89)
Запишем мантиссу в позиционной двоичной форме
mi— двоичные цифры,0или1. Так как представление
m1=0
. В двоичной системе если
X =0
в нормализованной двоичной фор-
μ = 0,m1m2m3m4...
(2.89)
нормализовано,
,где
m1не равна нулю, то она равна единице, то есть
μ = 0,1m2m3m4....
X =(−1)
s
· 2p· 0,1m2m3m4..., s ∈{0, 1},p∈ Z (2.90)
Запишем в память компоненты такого представления (рис. 2.7). Знакsзанимает
старший бит.
Следующиеwбит занимает порядокp. Порядок представляется кодом с из-
бытком, то есть после знакового бита следует натуральный код значения
ξ =2
w−1
− 2
постоянно для формата. Значение
p + ξ
называется смещённым
где
p + ξ
порядком.
Минимально представимое значение смещённого порядка кодируется строкой из одних нулей, максимально представимое — строкой из единиц. Оба они
считаются специальными — смещённому порядку
ли и денормализованные числа,
111 ...111
— бесконечности, неопределённость
000 ...000
соответствуют ну-
и нечисла.
Таким образом, минимальное допустимое значение смещённого порядка нормализованного числа кодируется как
p
=1− ξ =3−2
min
w−1
, максимальное — кодируется как
ственно максимальный порядок числа p
000 ...001
max
, а собственно порядок равен
=2w− 2 − ξ =2
111 ...110
w−1
.
, соответ-
Последние n бит числа с плавающей запятой занимает округлённая мантисса.
Так как для нормализованного числа старший бит мантиссы
m1всегда равен
единице, его не имеет смысла хранить. Соответственно,nбит мантиссы хранят
,

94 Глава 2. Представление данных
s
· 2p· 0,1m2...m
(−1)
(−1)
p
s
min
· 2
p
p p
min
· 0,0m2...m
n − 10n + w − 1 nn + w
n − 10n + w − 1 nn + w
m2m3m4...m
m2m3m4...m
n+1
n+1
s
а)
б)
s
000 ...000
p + ξ
n+1
max
n+1
s
в)
n − 10n + w − 1 nn + w
s
г)
n − 10n + w − 1 nn + w
x
д)
111 ...111
n − 10n + w − 1 nn + w
000 ...0000 ...000
000 ...0111 ...111
qxx...x
(−1)
(−1)
s
s
Рис. 2.7. Структура числа с плавающей запятой согласно
стандарту IEEE 754: а) нормализованное число,
б) денормализованное, в) ноль, г) бесконечность,
д) неопределённость или нечисло
разряды от
m2до
m
. В поле смещённого порядка нормализованного числа
n+1
записывается натуральный двоичный код p + ξ (рис. 2.7, а).
Если порядок числа X слишком мал (p<p
s
p
min
X =(−1)
· 2
· μ, s ∈{0, 1}, 0 μ<0,1
), число представляют в виде:
min
и называют денормализованным.
Старший бит
μ = 0,0m2m3m4...
(
тиссы записываются разряды от
m1мантиссы денормализованного числа всегда равен нулю
), так что его тоже не имеет смысла хранить. В поле ман-
m2до
m
. В поле смещённого порядка де-
n+1
нормализованного числа записывается специальное значение
б).
Если смещённый порядок равен
000 ...000
и при этом все биты мантиссы
равны нулю, получаем значение ±0 (рис. 2.7, в):
s
p
min
· 2
X =(−1)
· μ, s ∈{0, 1},μ= 0,0000 ...0 (2.92)
· 0
·∞
2
000 ...000
(2.91)
(рис. 2.7,
Нули считаются не денормализованными, а специальными значениями, хотя и могут быть декодированы по формуле (2.91).
Если смещённый порядок состоит только из единиц (равен
111 ...111
), а поле мантиссы — только из нулей, получаем специальное значение бесконечности
(рис. 2.7, г).

2.8. Представление вещественных чисел 95
В зависимости от поля знака, существуют два значения бесконечности и два
нуля, так что
s
и (−1)
1
=+∞
+0
·∞соответственно.
Если смещённый порядок равен
1
и
= −∞
−0
. На рис. 2.7, в) и г) это показано как
111 ...111
, а поле мантиссы содержит не
(−1)s·0
только нули, получаем так называемые нечисла (рис. 2.7, д). Нечисла не имеют
Если при этом старший сохраняемый бит мантиссы (qна рис. 2.7, д) равен
единице, это так называемое тихое нечисло, или вещественная неопределённость
(получаемая, в частности, как
0
). Если
0
q =0
, нечисло называется сигнальным и не
может быть результатом вещественной операции.
Форматы двоичных чисел с плавающей запятой согласно IEEE 754
Стандарт IEEE 754-1985 описывает два двоичных формата с плавающей запятой — 32-битный формат одинарной точности и 64-битный формат двойной
точности. В IEEE 754-2008 были добавлены 16- и 128-битный двоичный форматы
(от названий в новой версии формата отказались), а также описана общая формула
k-битного двоичного формата для k 128 (таблица 2.9).
Стандартные двоичные форматы с плавающей запятой
Таблица 2.9
Общая длина n + w +1,бит 16 32 64 128 k 128
Длина кода знака s,бит 111 1 1
Длина кода порядка w,бит 5 8 11 15 round(4·log2k) −13
Длина кода мантиссы n,бит 10 23 52 112 k − w − 1
Также IEEE 754-2008 описывает возможность расширения стандартных форматов с увеличением как точности мантиссы, так и диапазона порядка.
Кроме двоичных, IEEE 754-2008 описывает два десятичных формата длины 64
и 128 бит, а также формулы для десятичного формата длины
k =32κ
. Десятичные
форматы IEEE 754-2008 имеют более сложную структуру, чем двоичные. Для
экономии памяти в мантиссе для цифр
m2,m3,m4...
используется кодирование
троек десятичных цифр группами по десять бит (так как число кодовых комбинаций
210= 1024 > 103, это возможно), а код порядка соединён с кодом старшей
цифры m1=0.
Структура нестандартного числа FPU x87
В математическом сопроцессоре x87 (FPU), входящем в состав процессоров
линейки x86, используется нестандартный формат вещественных чисел (рис. 2.8),

96 Глава 2. Представление данных
так как первый подобный сопроцессор был выпущен задолго до первой редакции
стандарта IEEE 754.
s
· 2p· 0,1m2...m
s
а)
б)
s
000 ...000
p + ξ
63 078 6479
63 078 6479
1m2m3m4...m
0m2m3m4...m
n
n
(−1)
(−1)
p
min
s
p p
p
· 2
min
· 0,0m2...m
n
max
n
s
· 0
(−1)
s
(−1)
·∞
неопределённость
тихое нечисло
сигнальное нечисло
ж)
s
в)
63 078 6479
s
г)
63 078 6479
д)
63 078 6479
x
е)
63 078 6479
x
63 078 6479
000 ...0000 ...000
000 ...0111 ...111
110 ...0111 ...1111
11x...x111 ...111
10x...x111 ...111
Рис. 2.8. Структура внутреннего представления чисел в FPU x87:
а) нормализованное число, б) денормализованное, в) ноль,
г) бесконечность, д) вещественная неопределённость,
е) тихое нечисло, ж) сигнальное нечисло
Порядок этого формата занимает
w =15
бит, мантисса —
n =64
бита. Общий
размер числа k = n + w +1=80бит.
Формат сопроцессора x87 отличается от стандартных не только разрядностью
полей (IEEE 754 предусматривает расширенные форматы с увеличенной разрядностью), но и тем, что мантисса включает старший бит (единицу для нормализованных
чисел и ноль для денормализованных). Благодаря этому, кроме тихих и сигнальных
нечисел, возможны недопустимые значения, для которых старший бит мантиссы
не соответствует порядку.
Также FPU x87 различает несколько видов тихих нечисел (рис. 2.8, е). Только
один из них является вещественной неопределённостью (рис. 2.8, д).
Недопустимыми считаются значения, не соответствующие ни одному из шаблонов рис. 2.8, а-ж). Для порядка, состоящего из всех нулей, недопустим единичный

2.8. Представление вещественных чисел 97
старший бит мантиссы (рис. 2.9, а). Для
x
а)
63 078 6479
yyy . . . yyy
x
б)
63 078 6479
x
в)
111 ...111
63 078 6479
p
min
1xx...x000 ...000
0xx...x
0yy...y
p p
недопустим нулевой
max
∃y =0, ∃y =1
∃y =0
Рис. 2.9. Недопустимые значения в FPU x87:
а) с нулевым порядком, б) с порядком p
min
p p
max
,
в) с порядком, состоящим из единиц
старший бит мантиссы (рис. 2.9, б). Для порядка, состоящего из всех единиц,
недопустима ненулевая мантисса с нулевым старшим битом (рис. 2.9, в).
Возможен экспорт из описанного нестандартного представления в стандартные
форматы одинарной и двойной точности.
Точность двоичных чисел с плавающей запятой
Как и в случае фиксированной запятой, формат с плавающей точкой не может
описать все вещественные значения в заданном диапазоне.
При сохранении вещественного числаXв формате с плавающей запятой оно
округляется до ближайшего представимого числа˘X.
Если
˘
X =(−1)
s·2p
·μ
нормализовано, то абсолютная погрешность округления
не превышает веса младшего разряда мантиссы:
X −˘X
p
2
<
n+1
2
=2
p−n−1
. (2.93)
Эта величина зависит от порядка числаp, а также от количества бит в мантиссе
(n постоянно для формата), и превышает единицу при p>n+1.
Таким образом, с ростом абсолютной величиныX(и, соответственно, порядка
p) абсолютная погрешность округления катастрофически растёт.
Относительная погрешность округления до нормализованного
X −˘X
X
1
:
n
2
<
p
2
·|X |
1
· μ
≈
n+1
2
=
n+1
2
2
2
n+1
n+1
2
1
· 0,1
p
·|˘X|
=
n+1
2
1
=
.
n
2
2
оценена сверху как
p
2
· 2p· μ
˘
может быть
X
=
(2.94)
n

98 Глава 2. Представление данных
Оценка на самом деле точная, так как хотя настоящая мантиссаXне равнаμ, она
также больше или равна 0,12.
ЕслиXневозможно представить в нормализованном виде, абсолютная погрешность округления не превышает
p
min
2
n+1
2
=2
p
min
−n−1
, относительная погрешность
будет расти при уменьшении абсолютной величиныX, так как мантисса денормализованного числа может быть сколь угодно близка к нулю.
Погрешность округления при сохранении числаXв формате с плавающей
запятой одинарной точности составит
−23
2
· X ≈ 1,2 · 10−7· X
. Соответственно,
такое число сохранит шесть верных десятичных цифр (не после запятой, а всего!)
и седьмую — с погрешностью. Остальные будут полностью потеряны. При сохранении в формат двойной точности погрешность составит
2
−52
· X ≈ 2 · 10
−16
· X
то есть сохраняется пятнадцать десятичных цифр.
Арифметика чисел с плавающей запятой
,
Пусть два числа X
X
X
∈ R представлены в формате с плавающей запятой:
1,X2
s
p
1
=(−1)
1
=(−1)
2
1
· N
s
2
· μ1, 0,1N μ1< 1
p
2
· N
· μ2, 0,1N μ2< 1
(2.95)
Числа, представленные подобным образом, удобно умножать:
X
Здесь
=(−1)
1·X2
0,01N μ1· μ2< 1
s
1
·N
p
1
·μ1·(−1)
s
p
2
2
·N
·μ2=(−1)
. Если
μ1· μ2< 0,1N, мантисса дополнительно нор-
s1⊕s
p1+p
2
·N
2
·μ1·μ
2
(2.96)
мализуется; соответственно корректируется порядок результата. Таким образом,
где
X1· X2=(−1)
· μ2= N
μ
1
p
s1⊕s
μ
· μ, 0,1N μ<1. (2.98)
2
· N
p1+p2+p
μ
· μ (2.97)
Умножение чисел с плавающей запятой коммутативно и в большинстве случаев
ассоциативно. Ассоциативность может нарушиться, если на каком-то шаге получится денормализованное число или бесконечность. Так, если все вычисления
выполняются с одинарной точностью, то
−64
2
· (264· 264)=2
−64
· (+∞)=+∞.
−64
(2
· 264) · 264=1· 264=264,но
Аналогично выполняется деление:
s
p
1
· N
s
2
· N
=(−1)
μ
1
= N
μ
2
1
· μ
1
=(−1)
p
2
· μ
2
s1s
2
p
μ
· μ, 0,1N μ<1. (2.100)
· N
s1s
p1−p2+p
p1−p
2
· N
μ
· μ
μ
1
2
·
=
μ
2
(2.99)
где
X
X
(−1)
1
=
(−1)
2

2.8. Представление вещественных чисел 99
Порядок и нормализованная мантисса записываются в виде, соответствующем
формату.
Сложение двух чисел одного порядка
p = p1= p2сводится к сложению или
вычитанию — с учётом знаков чисел — мантисс (с последующей нормализацией):
X1+X2=(−1)
s
1
·Np·μ1+(−1)
s
2
·Np·μ2= Np·(−1)
s
1
·μ1+(−1)
s
2
·μ
(2.101)
2
Для того, чтобы сложить два числа различных порядков, их вначале необходимо привести к одному порядку (наибольшему). Пусть для определённости
Тогда
X
2
=(−1)
s
p
2
2
· N
· μ2=(−1)
s
2
· N
μ
p
1
2
·
p1−p
2
N
p1>p2.
(2.102)
Приведение к большему порядку соответствует беззнаковому сдвигу мантиссы
μ2вправо. При этом, так как длина мантиссы ограниченаnбитами, часть цифр
теряется. При достаточно большой разнице порядков (
форматов) приведённая мантисса
N
μ
2
окажется равной нулю, так что в итоге
p1−p
2
p1− p2>n
для двоичных
получим X1+ X2= X1.
После приведения выполняется собственно сложение/вычитание:
μ
X
+ X2= N
1
p
1
·(−1)
s
1
· μ1+(−1)
s
2
2
·
p1−p
2
N
(2.103)
Вычитание чисел с плавающей запятой сводится к сложению сменой знака.
В общем случае
(X1+ X2) −X1= X2. Чем больше разница порядков
X1и
X2,
тем сильнее теряется точность. Соответственно, сложение чисел с плавающей запятой не будет ассоциативным практически ни для каких слагаемых. Это отличает
его от сложения с насыщением, где ассоциативность нарушается только в случае,
когда промежуточный результат выходит за границы допустимого диапазона.
Таким образом, арифметика чисел с плавающей запятой не является ни циклической, ни арифметикой с насыщением и в общем случае коммутативна, но
неассоциативна. Для того, чтобы уменьшить ошибку вычислений, необходимо выстроить алгоритм так, чтобы избежать вычитания очень близких друг к другу чисел.
Сложение множества чисел существенно разного порядка желательно начинать
с ближайших к нулю.
Для любого действия возможна ситуация, когда порядок результата непредставим в используемом формате. Если порядок слишком велик для используемого
формата, результат будет равен специальному значению — бесконечности с соответствующим знаком,
+∞
или
−∞
. Если порядок слишком мал — результат
будет денормализован.
Для специальных значений
+∞ + x =+∞,−∞ + x = −∞
(+∞) · (−x)=−∞, а также
+∞и−∞
. Если при этом
x
=+0,
+∞
и любого конечного числаxвыполняется
x>0
,то
x
= −0 ит.п.
−∞
(+∞) · x =+∞
,

100 Глава 2. Представление данных
Кроме того, арифметика с плавающей запятой включает такое специальное
значение, как вещественная неопределённость (обычно обозначаемая
a number). Результат принимается равным
0
как
∞
,
,
+∞−∞,0 ·∞
0
∞
, а также для всех тех, где хотя бы один из операндов
nan
, в частности, для таких операций,
nan
—not
равен nan.
Практика показывает, что одинарная точность недостаточна почти всегда
(исключение составляют простые одношаговые вычисления и те, погрешность которых не принципиальна, в частности, графика игр). Двойная точность и точность
нестандартного формата FPU подходят для большинства приложений. Алгоритмы,
требующие предсказуемой погрешности вычислений (в частности, арифметическое
сжатие), вообще не могут быть реализованы для чисел с плавающей запятой. В подобных случаях может использоваться представление с фиксированной запятой,
но чаще всего алгоритм модифицируется так, чтобы работать с целыми числами.
Нормализованное представление в отечественной и зарубежной традиции
В зарубежных источниках
(2.83)
называется нормализованным в случае, когда
1 μ<10N[16]. Там считается, что мантисса нормализованного числа включает
целую часть (хотя суть от этого не меняется). Действительно, пусть
s
· Np· μ, s ∈{0, 1},p∈ Z, 0,1N μ<1, (2.104)
s
· Np· μ, s ∈{0, 1}, p ∈ Z , 1 μ<10
N
(2.105)
(2.106)
· μ = m1,m2m3m4...
N
то есть μ =
Тогда
X =(−1)
0,m1m2m3m4..., m1=0. Пусть также
X =(−1)
⎧
s = s
⎨
p = p − 1
⎩
μ = N · μ =10
Так как двоичная/десятичная запятая является нецифровым символом, она не
может быть записана в память, а только подразумевается на той или иной позиции, двоичное представление мантиссы в формах
(2.104)и(2.105)
полностью
совпадает.
Порядокpформы
(2.105)
, соответственно, записывается с избытком
ξ = ξ +1
Одна из основных особенностей кода со смещением — невозможность «визуально»
определить ноль, так что полученный код (смещённый порядок) также полностью
совпадает для форм (2.104) и (2.105).
Таким образом, двоичное представление одинаковых чисел (как нормализуемых в формате расширенной точности, так и денормализованных) одинаково и не
зависит от формы нормализованного представления.
.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
