a, f

advertisement
ФГОБУ ВПО "СибГУТИ"
Кафедра вычислительных систем
ОСНОВЫ ПРОГРАММИРОВАНИЯ
Системы счисления.
Внутреннее целых и вещественных чисел.
Преподаватель:
Доцент Кафедры ВС, к.т.н.
Поляков Артем Юрьевич
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
Системы счисления
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
2
Системы счисления
 Число –абстрактная сущность для описания количества.
 Цифры – это знаки, используемые для записи чисел.
 Чисел больше чем цифр => для записи числа используется
комбинация цифр.
 Система счисления (CC): символический метод записи чисел,
представление чисел с помощью письменных знаков.
 В СС каждое число имеет уникальное представление.
 Величина числа может зависеть и не зависеть от порядка цифр в
записи.
 Систем счисления подразделяются на:
•
•
•
позиционные
непозиционные
смешанные
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
3
Позиционные системы счисления
Под позиционной системой счисления обычно понимается
b-ричная система счисления, которая определяется целым
числом b, называемым основанием системы счисления.
Целое число без знака x в b-ричной системе счисления
представляется в виде конечной линейной комбинации
степеней числа b:
n 1
x   ak b k ,
k 0
где ak – набор весовых коэффициентов разрядов, k – номер
разряда.
Например: 4285 = 4∙103 + 2∙102 + 8∙101 + 5 ∙100
т.е. a = {5, 8, 2, 4}
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
4
Наиболее употребляемые
позиционные системы счисления
b
Название
Описание
1
единичная
счет на пальцах, зарубки, узелки
2
двоичная
дискр. математика, информатика
8
восмеричная
программирование, информатика
10
десятичная
используется повсеместно
12
двенадцатеричная
счет дюжинами, время
16
шестнадцатеричная
программирование, информатика
60
шестидесятеричная
время, углы, координаты
В позиционных системах чем больше основание системы, тем
меньшее количество разрядов (цифр) требуется при записи числа.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
5
Непозиционные системы счисления
В непозиционных СС значение цифры не зависит от ее
расположения. Однако такая СС может накладывать ограничения на
положение цифр (например, расположение по убыванию).
Римская система счисления. Цифры:
I
V
X
L
C
D
M
1
5
10
50 100 500 1000
Натуральные числа записываются при помощи повторения
римских цифр.
Если большая цифра стоит перед меньшей, то они складываются
(принцип сложения), иначе – меньшая вычитается из большей
(принцип вычитания).
3421 - ? 974 - ? 838 - ?
XCIX - ? DLXXXIII - ? MMXII - ?
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
6
Непозиционные системы счисления
В непозиционных СС значение цифры не зависит от ее
расположения. Однако такая СС может накладывать ограничения на
положение цифр (например, расположение по убыванию).
Римская система счисления. Цифры:
I
V
X
L
C
D
M
1
5
10
50 100 500 1000
Натуральные числа записываются при помощи повторения
римских цифр.
Если большая цифра стоит перед меньшей, то они складываются
(принцип сложения), иначе – меньшая вычитается из большей
(принцип вычитания).
3421 - MMMCDXXI 974 - CMLXXIV 838 - DCCCXXXVIII
XCIX - 99 DLXXXIII - 583 MMXII - 2012
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
7
Смешанные системы счисления
Смешанная
система
счисления
является
обобщением
b-ричной системы счисления. Зачастую относится к позиционным
системам счисления.
Основанием
смешанной
системы
счисления
является
возрастающая последовательность чисел {bk}, и каждое число в ней
представляется как линейная комбинация:
n 1
x   ak bk ,
k 0
где на коэффициенты ak, называемые как и прежде цифрами,
накладываются некоторые ограничения.
Записью числа x в смешанной системе счисления называется
перечисление его цифр в порядке уменьшения индекса k, начиная с
первого ненулевого ak.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
8
Представление времени
Наиболее известным примером смешанной системы
счисления является представление времени в виде количества
суток, часов, минут и секунд.
b0  1, b1  60  b0 , b2  60  b1 , b3  24  b2
Величина «d дней, h часов, m минут, s секунд» соответствует
значению
d  24  60  60  h  60  60  m  60  s
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
9
Недостатки непозиционных
и смешанных систем счисления
Непозиционные СС:
• Требуют постоянного введения новых знаков для записи
больших чисел.
• Не предусмотрено представление дробных и отрицательных
чисел.
• Затруднено создание универсальных алгоритмов выполнения
арифметических операций.
Смешанные СС:
• Трудны для восприятия человека.
• Больше подходят для решения
(представление времени).
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
конкретной
задачи
10
Перевод чисел между позиционными
системами (способ №1)
Перевод из системы счисления
основанием с:
с основанием b в CC с
xb → xc
xb = aN aN-1 … a1a0
xc = (aN)c∙(bc)N + (aN–1)c∙(bc)N-1 + … + (a1)c∙(bc)1 + (a0)c∙(bc)0
Примеры:
101102 = 1∙25 + 0∙24 + 1∙23 + 1∙22 + 1∙21 + 0∙20 =
= 32 + 8 + 4 + 2 = 4610
2AF16 = 2∙162 + 10∙161 + 15∙160 = 512 + 160 + 15 = 68710
4810 = 416∙A1 + 816∙A0
4810 = 1002∙10101 + 10002∙10100
Вычисление в недесятичной системе
счисления затруднительны
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
11
Перевод чисел между позиционными
системами (способ №2)
2510 = 110012
Для перевода числа xa в систему с
основанием b необходимо разделить
xa на b. Деление продолжать до тех
пор, пока частное не станет меньше b.
25
2
24
12
2
1
12
6
2
0
6
3
2
0
2
1
Остатки от деления, записанные в
обратном
порядке,
начиная
с
частного, будут искомым числом.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
1
12
Анализ способа №2
x10  ab  aN aN 1...a1a0 (b)
a N a N 1...a1a0 (b )
x10
ab



b
b
b
a N  b  a N 1  b
N
N 1
 ...a1  b  a0  b
1
0
b
a N  b N 1  a N 1  b N  2  ...  a1  b 0

x10 mod b  ab mod b  a0
mod – остаток от деления
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
13
Анализ способа №2 (2)
x10
N 1
N 2
0

x10 
 aN  b
 a N 1  b
 ...a1  b 
b
a N a N 1...a1
a N a N 1...a1( b )

x10
ab



b
b
b
a N  b N 1  a N 1  b N  2  ...a1  b 0

b
N 2
N 3
0
aN  b
 a N 1  b
 ...  a2  b
 mod b  ab mod b  a1
x10
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
14
Алгоритм перевода чисел между
позиционными системами по способу №2
Начало
x
a0 = x mod b , x = x div b,
(1)
y=0
s=1
a1 = x mod b , x = x div b ,
(2)
a2 = x mod b , x = x div b ,
(3)
x>0
y = y + (x mod b)∙s
x = x div b
s=s∙b
…
aN–1 = x mod b, x = x div b ,
(N-1)
aN = x, (x < b),
(N)
Конец
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
15
Двоичная система счисления
Транзистор
Конденсатор
Ферромагнетики
Элементная база позволяет создавать приборы,
имеющие два устойчивых состояния
Наиболее удобной является двоичная система счисления
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
16
Двоичная арифметика
СЛОЖЕНИЕ
Примеры:
10110
1001
+ 101
+ 1010
11011
10011
x+y
x/y
0
1
0
0
1
1
1
10
1111
+
1
10000
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
101,011
+ 1,11
111,001
17
Двоичная арифметика
УМНОЖЕНИЕ
x∙y
x/y
0
1
0
0
0
1
0
1
Примеры:
1011
*101
+ 1011
1011
110111
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
1101
*11
+ 1101
1101_
100111
18
Двоичная арифметика
ВЫЧИТАНИЕ
x–y
x/y
10
1
0
0
1
1
1
0
Примеры:
1011
1001
- 111
- 110
100
11
11-1011= -(1011-11)
1011
- 11
1000
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
19
Двоичная арифметика
ДЕЛЕНИЕ
Деление в двоичной системе счисления выполняется, как
и в десятичной системе.
Пример:
10101
- 111
111
- 111
0
111
11
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
20
Внутреннее представление
целых чисел в ЭВМ
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
21
Представление чисел в ЭВМ
Особенности представления чисел в ЭВМ:
• используется двоичная система счисления
• ограниченное количество разрядов
• в ЭВМ используется память, элементарная ячейка
которой (бит) может иметь только 2 состояния (0 и 1).
Поэтому отсутствует возможность хранить знаки:
( "+", "–" и "." ).
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
22
Представление целых чисел без знака
• Пусть дана ячейка памяти, размер которой k бит.
• Существует 2k всевозможных битовых наборов длины k.
• Следовательно, всего возможно представить 2k различных
чисел.
• Существует (2k)! способов закодировать беззнаковые числа
битовыми наборами.
• Среди всех теоретически возможных способов наиболее удобно
использовать k-разрядную запись этого числа в двоичной
системе счисления. Это позволяет естественным образом
реализовать арифметические операции над числами.
0
1
2
3
4
5
6
7
1 1 1 1 0 1 0 1
17510 = 1010 11112
0 0 1 0 0 1 0 0
3610 = 10 01002
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
23
Сложение и вычитание целых чисел без знака
Сложение и вычитание k-разрядных целых чисел без знака
происходит по обычным для позиционных систем счисления
правилам. Примеры (для k = 3):
0012 + 1002 = 1012;
1012 − 0102 = 0112.
Ситуации, когда уменьшаемое меньше вычитаемого или когда
результат суммы не умещается в k разрядов, считаются
ошибочными и должны отслеживаться устройством компьютера.
Обработка переполнения:
Если при сложении двух k-разрядных чисел возникает (k+1)-й
разряд, то он будет отброшен. Пример (для k = 3):
510 + 410 = 1012 + 1002 = 10012 = 0012 = 110
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
24
Представление знаковых целых
Отрицательные числа могут быть представлены в ЭВМ
несколькими способами, выбор одного из которых оказывает
влияние на реализацию арифметических операций.
Для представления знаковых целых чисел используются три
способа:
1) прямой код;
2) обратный код;
3) дополнительный код.
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
25
Прямой код
Это наиболее очевидный и близкий к естественному способ
записи чисел. Число формируется из одного знака и
фиксированного количества разрядов (цифр), представляющих
собой модуль числа.
При формировании прямого кода в двоичной системе
старший бит (разряд) используется для хранения знака:
0 ~ "+", 1 ~ "-".
Например:
0
1
2
3
4
5
6
7
0 0 1 0 0 1 1 1
0 0 1 0 0 1 0 1
-10010 = 1110 01002,
10010 = 0110 01002
-3610 = 1010 01002,
3610 = 10 01002
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
26
Обратный код
Обратный код отрицательного числа в двоичной СС
формируется путем инвертирования каждого разряда, включая знак,
на противоположный.
Также для формирования обратного кода можно использовать
следующее выражение: из максимального числа, состоящего из 1-ц
во всех разрядах, вычесть модуль отрицательного числа.
-x = 1111 11112 - |x| (для 8-битных целых)
10010 = 0110 01002, –10010 = 1001 10112
–10010 = 1111 11112 – 0110 01002 = 1001 10112
0
1
2
3
4
5
6
7
1 1 0 1 1 0 0 1
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
27
Обратный код (сумма)
Сложение в обратном коде происходит следующим образом: по
обычному алгоритму складываются все разряды, включая знаковый.
Если результат имеет длину k+1 (был перенос при сложении
старших разрядов операндов, иначе – нулю).
Значение левого k+1-го разряда добавляется к младшему разряду
результата. Получаем k-разрядный набор, который и будет суммой
двух чисел в обратном коде.
–10010 = 1001 10112
I. 11010 + (–10010) = 0110 11102 + 1001 10112 = 1 0000 10012
II. 0000 10012 + 1 = 10102 = 1010
Вычитание чисел в обратном коде
сводится к сложению
x – y = x + (–y).
+ 1001 1011
0110 1110
10000 1001
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
28
Дополнительный код
Положительные числа в дополнительном коде представляются в
двоичной системе счисления.
Для представления отрицательных чисел формируется число
(M(k)+1), где M(k) – максимальное двоичное число разрядности k
(1-цы во всех разрядах). Далее (k = 8):
M(8) + 1 = 1111 1111 + 1 = 1 0000 0000
– x = 0 – |x| = 1 0000 0000 – |x|
– 1 = 0 – 1 = 1 0000 0000 – 1 = 1111 1111
– 2010 = – 1 01002 = 1 0000 00002 – 0001 01002 = 1110 11002
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
1 1 1 1 1 1 1 1
0 0 1 1 0 1 1 1
-1
– 20
ноль имеет два представления в прямом и обратном коде, а
в дополнительном коде представление нуля единственно.
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
29
Дополнительный код (сумма)
В дополнительном коде сложение происходит так: по обычному
алгоритму: складываются все разряды, включая знаковый; единица
переноса в (k+1)-й разряд отбрасывается (сложение по модулю 2k ).
–10010 = –110 01002 = 1 0000 00002 –11001002 = 1001 11002
I. 11010 + (–10010) = 0110 11102 + 1001 11002 = 1 0000 10102
Вычитание чисел в дополнительном
коде сводится к сложению
x – y = x + (–y).
-10000 0000
110 0100
1001 1100
+ 0110 1110
1001 1100
10000 1010
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
30
Дополнительный код
Сложение и вычитание по модулю 2k
k

x

y
,
если
(
x

y
)

2
( x  y ) mod 2k  
k
k
x

y

2
,
если
(
x

y
)

2

 x  y, если x  y
k
( x  y) mod 2   k
2  x  y, если x  y
Связь дополнительного и обратного кодов:
<Доп. код> = <Обр. код> + 1
Дополнительный код
– х = 0 – |х| = 1 0000 00002 – |х|
– 1 = 0 – 1 = 1 0000 0000 – 1 =
1111 11112
Обратный код
– х = 0 – |х| = 1111 11112 – |х|
– 1 = 0 – 1 = 1111 11112 – 1 =
1111 11102
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
31
Сравнение различных представлений
знаковых чисел (двоичная система, 3 бит)
Битовый
набор
Без
знака
Прямой
код
Обратный
код
Доп.
код
000
0
+0
+0
0
001
1
+1
+1
+1
010
2
+2
+2
+2
011
3
+3
+3
+3
100
4
–0
–3
–4
101
5
–1
–2
–3
110
6
–2
–1
–2
111
7
–3
–0
–1
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
32
Недостатки дополнительного кода
Битовый
набор
Доп.
код
000
0
001
+1
010
+2
011
+3
100
–4
101
–3
110
–2
111
–1
1. Несимметричность диапазона представимых значений
относительно
0. Для
рассмотренного примера не существует
числа 4, однако есть число –4. Это может
приводить к переполнению операции –x.
2. Поразрядный сдвиг вправо на один разряд
для отрицательных чисел дает результат,
отличный от результата для положительных:
5>>1 = 2, -5>>1 = -3.
В общем случае результат сдвига может
быть описан следующей формулой:
x>>1 = x/2, где y = x - округление в
меньшую сторону (ближайшее к x целое,
такое, что y < x),например 6.7 = 6.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
33
Внутреннее представление
вещественных чисел в ЭВМ
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
34
Вещественные числа
• В памяти ЭВМ не предусмотрено специальных средств для
запоминания десятичной точки.
• Существует два способа представить вещественное число в виде
десятичной дроби:
1. Явно указав позицию запятой внутри числа:
23.456, 0.0098;
2. Научный, с помощью степени (например по основанию 10):
2.3456*101, 0.98*10-2.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
35
Вещественные числа с
фиксированной запятой (точкой)
Данное представление соответствует первому варианту записи
вещественных чисел. Положение точки внутри байта (байтов)
задается фиксировано.
Например: пусть для хранения используется 1 байт, для
хранения целой части отведем биты с 0 по 4, для дробной – с 5 по 7:
0000 0.000
0000 0.001
0000 0.010
.....
1111 1.110
1111 1.111
Недостатки:
1) Малый диапазон значений.
2) Неэффективное использование памяти при работе только с
малыми числами или только с большими числами.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
36
Научная форма записи вещественных чисел
Научная форма записи вещественных чисел позволяет
представить одно и то же число множеством различных
способов.
Например, постоянная Планка h = 6.626110-27 может быть
записана одним из следующих способов:
1) 66.26110-28
2) 6626110-31
3) 0.6626110-26
4) 0.0006626110-23
5) …
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
37
Вещественные числа с
плавающей запятой (точкой)
p-разрядным числом с плавающей точкой по основанию b с
избытком q называется пара величин (e,f), которой соответствует
значение:
( e, f ) = f  b(e – q)
e – порядок – беззнаковое целое число, изменяющаяся в
определенном промежутке.
f – мантисса – знаковое вещественное число с фиксированной
точкой, при этом | f | < 1, т.е. разделяющая точка находится в
крайней слева позиции.
q – избыток, для знакового представления порядка.
Число с плавающей точкой является нормализованным, если:
1) наиболее значимая цифра в представлении f отлична от нуля:
1/b ≤ | f | < 1
2) f = 0 и е принимает наименьшее возможное значение
Например: 0.615, 0.101, 6.15, 0.01
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
38
p-разрядные нормализованные числа
( e, f ) = f  be-q
В ЭВМ для хранения вещественных чисел отводится
ограниченное число разрядов, т.е. f  bp – целое число и
–bp ≤ f  bp ≤ bp,
Пример: 6-разрядное вещественное число, е – 2 разряда,
избыток q = 50, основание b = 10.
Постоянную Авогадро – физическая величина, численно равная
количеству атомов, молекул и т.д. в 1 моле вещества:
NA = 6,022 140 78(18)·1023 = 6,022 140 78181818(18) · 1023 моль−1
Нормализованная форма ( e, f ):
( e, f ) = (74, 0,6022 140 78181818(18))
p-разрядное представление (e',f '):
f '∙ 106 = [f ∙ 106] = [6022 14,0 78181818(18)] = 602214
(e',f ') = (74, 0,602214)
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
39
Стандарт IEEE 754-2008 (Single precision)
Размер, выделяемый для хранения: 4 байта (32 бита)
(e, f ,s) = s1.f  be-q
f: 23 бит; e: 8 бит; s: 1 бит,
b = 2, q = 28-1 – 1 = 127
0 1
22 23
f
30 31
e
s
В стандарте IEEE 754-2008 понятие нормализованной дроби
несколько изменено:
Например:
12 ≤ | f | < 102
10101.11 → 1.010111∙24,
0.0001010 → 1.01∙2-4
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
40
Примеры внутреннего представления
вещественных чисел (1)
( e, f ,s) = s1.f  be-q
0
1
22 23
f
30 31
e
s
Десятичное представление
1
Двоичное представление
120
Результат упаковки (hex)
Двоичное представление
3f 80 00 00
0011 1111 1000 0000
0000 0000 0000 0000
f
1.0
e
0111 11112=7F16=12710
s
0 (~ "+" )
( 127, 0 ,0) = +1.0  2127-127 = + 1.0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
41
Примеры внутреннего представления
вещественных чисел (2)
( e, f ,s) = s1.f  be-q
0
1
22 23
f
30 31
e
s
Десятичное представление
-1
Двоичное представление
-120
Результат упаковки (hex)
Двоичное представление
bf 80 00 00
1011 1111 1000 0000
0000 0000 0000 0000
f
1.0
e
0111 11112=7F16=12710
s
1 (~ "–" )
( 127, 0 ,1) = –1.0  2127-127 = –1.0
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
42
Примеры внутреннего представления
вещественных чисел (3)
( e, f ,s) = s1.f  be-q
0
1
22 23
f
30 31
e
s
Десятичное представление
0.0625
Двоичное представление
12-4 = 0.0001
Результат упаковки (hex)
3d 80 00 00
Двоичное представление
0011 1101 1000 0000
0000 0000 0000 0000
f
1.0
e
0111 10112=7B16=12310
s
0 (~ "+" )
( 127, 0 ,0) = +1.0  2123-127 = +2-4 = 0.0625
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
43
Примеры внутреннего представления
вещественных чисел (4)
( e, f ,s) = s1.f  be-q
0
1
22 23
f
30 31
e
s
Десятичное представление
5.3
Двоичное представление
101.0100110011001…
Результат упаковки (hex)
40 a9 99 9a
Двоичное представление
0100 0000 1010 1001
1001 1001 1001 1010
f
1.010 10011001 1001 1001 1010
e
0100 00002=8116=12910
s
0 (~ "+" )
( 127, 0 ,0) = +1.01010011001…  2129-127 = 1.01010011001…  22
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
44
Анализ числа 5.3
1.0101 0011 0011 0011 0011 0102  22 =
= 101.01 0011 0011 0011 0011 0102 =
5 + 2-2 + 2-5 + 2-6 + 2-9 + 2-10 +
2-13 + 2-14 + 2-17 + 2-18 + 2-20 =
5 + 0.25 + 0,03125 + 0,015625 +
+ 0,001953125 + 0,000976562 +
+ 0,00012207 + 0,000061035 +
+ 0,000007629 + 0,000003815 + 0,000000954 =
5,299999237 + 0,000000954 = 5,300000191 ≠ 5.3
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
45
Примеры внутреннего представления
вещественных чисел (5)
( e, f ,s) = s1.f  be-q
0
1
22 23
f
30 31
e
s
Десятичное представление
5.1
Двоичное представление
101.0 0011 0011 0011…
Результат упаковки (hex)
40 a3 33 33
Двоичное представление
0100 0000 1010 0011
0011 0011 0011 0011
f
1.010 0011 0011 0011 0011 0011
e
0100 00002=8116=12910
s
0 (~ "+" )
( 127, 0 ,0) = +1.010 0011 0011 …  2129-127 = 1.010 0011 0011 …  22
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
46
Анализ числа 5.1
1.010 0011 0011 0011 0011 00112  22 =
= 101.0 0011 0011 0011 0011 00112 =
5 + 2-4 + 2-5 + 2-8 + 2-9 +
2-12 + 2-13 + 2-16 + 2-17 + 2-20 + 2-21 =
5 + 0,0625 + 0,03125 +
0,00390625 + 0,001953125 +
+ 0,000244141 + 0,00012207 +
+ 0,000015259 + 0,000007629 +
0,000000954 + 0,000000477 = 5,099999905 ≠ 5.1
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
47
Ошибки округления
• Технические средства не позволяют хранить числа, заданные
бесконечными дробями
• Необходима замена любого числа конечной дробью,
ограниченной доступным количеством разрядов. Данная операция
называется округлением.
• Округлением числа x = ±dn…ds+1dsds–1ds–2 до s разрядов в
заданной СС называется его замена числом xs = ±dn…ds+1ds, в
котором разряды (s – 1), (s – 2), … являются нулевыми.
• Разность (x – xs) называется ошибкой округления.
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
48
Способы округления
1. Отбрасывание разрядов (s – 1), (s – 2),… как это реализовано для
целых чисел. Достоинством данного подхода является простота
аппаратурной реализации. Недостатком служит то, что знак ошибки
(x* − x) всегда противоположен знаку x. Ошибка имеет тенденцию
накапливаться.
2. Округление по правилам, используемым в арифметике.
Вещественные числа Xis, имеющие нулевые младшие разряды
(s – 1), (s – 2), … располагаются на числовой оси с шагом bs, как
показано на рисунке. При этом среди этих чисел есть число x*,
которое наиболее близко к x и | x* − x | ≤ bs
x x*
0
…
X-3-2 X-2 -2 X-1-2 X0-2 X1-2 X2-2
b = 2, s =-2: -0.11 -0.10 -0.01
0.00
0.01 0.10
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
X3-2 …
0.11
49
Примеры применения алгоритмов
округления для числа 5.310
Отбрасывание разрядов:
5.3 = 101.01 0011 0011 0011 0011 0011 00112 =
5,299999237 + 2-21 = 5,299999714
5,299999714 − 5,3 = − 2.86 · 10-7
Округление с использованием правил арифметики:
5.3 = 101.01 0011 0011 0011 0011 00112 =
101.01 0011 0011 0011 0011 001 + 2-21 =
101.01 0011 0011 0011 0011 010 =
5,299999237 + 2-20 = 5,300000191
5,300000191 – 5,3 = 1.91 · 10-7
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
50
Примеры применения алгоритмов
округления для числа 5.110
Отбрасывание разрядов:
5.1 = 101.0 0011 0011 0011 0011 0011 00112 =
5,099999905
5,099999905 − 5,1 = − 0.95 · 10-7
Округление с использованием школьной арифметики
5.1 = 101.0 0011 0011 0011 0011 0011 00112 =
5,099999905
5,099999905 − 5,1 = − 0.95 · 10-7
© Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»
51
Машинный ноль
( e, f ,s) = s1.f  be-q
0
1
22 23
f
30 31
e
s
Десятичное представление
0
Двоичное представление
0
Результат упаковки (hex)
00 00 00 00
Двоичное представление
0000 0000 0000 0000
0000 0000 0000 0000
f
1.000 0000 0000 0000 0000 0000
e
0000 00002=016=010
s
0 (~ "+" )
( 0, 0 ,0) = +1.000 0000 0000 …  20-127 = 1.000 0000 0000 …  2-127
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
52
Машинный ноль
( e, f ,s) = s1.f  be-q
• Число ω, для которого f = 0, мантисса m = 1.0, а порядок e
принимает наименьшее значение (для float e = 0 => (e – q)= – 127)
называется машинным нулем.
• Оно совпадает с минимальным положительным числом, которое
может быть представлено числом с плавающей точкой при
заданных размерностях f и e (для float размерность f – 23 бита, e – 8
бит).
Любое число x < ω рассматривается как 0!
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
53
Погрешности измерений
• Абсолютная погрешность (Δх) − разность между приближенным
значением некоторой величины и ее точным значением: Δх = |xп – xт|, где
xт – точное значение, а xп – приближенное.
• Относительная погрешность (δx) – погрешность измерения,
выраженная отношением абсолютной погрешности измерения к
действительному или измеренному значению рассматриваемой
величины: δx = Δх/xп, δx – безразмерная величина.
• В отличие от чисел с фиксированной точкой, сетка чисел, которые
способна отобразить арифметика с плавающей точкой, неравномерна:
она более густая для чисел с малыми порядками и более редкая — для
чисел с большими порядками.
• Для чисел с фиксированной точкой постоянным является порядок
абсолютной погрешности.
• Для чисел с плавающей точкой постоянным является порядок
относительной погрешности.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
54
Погрешности вещественных
чисел с фиксированной точкой
Рассмотрим 2-хразрядные числа с фиксированной точкой, один
разряд отводится под целую часть, второй – под дробную.
0.123
0.0
0.1
1.185
0.2
0.3 … 1.0
1.1
x
1.2 …
Δх1 = | xп – xт | = | 0.123 – 0.1 | = 0.023, порядок 10-2.
Δх2 = | xп – xт | = | 1.185 – 1.2 | = 0.015, порядок 10-2.
δx1 = Δх/xп = 0.023/0.123 ≈ 0.1860, порядок 10-1
δx2 = Δх/xп = 0.015/1.185 ≈ 0,0127 , порядок 10-2
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
55
Погрешности вещественных
чисел с плавающей точкой
Рассмотрим 2-хразрядные числа с плавающей точкой,
один разряд отводится под мантиссу, второй – под порядок.
0.123·10-9
0.0
…
0.1·10-9 0.2·10-9 0.3·10-9
0.123 ·109
0.1·109
0.2·109
0.3·109
Δх1 = | xп – xт | = 0.023·10-9, порядок 10-10.
Δх2 = | xп – xт | = 0.023·109, порядок 108.
δx1 = Δх/xп = 0.023·10-9 / 0.123·10-9 ≈ 0.186, порядок 10-1
δx2 = Δх/xп = 0.023·109 / 0.123·109 ≈ 0.186, порядок 10-1
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
56
x
Машинный эпсилон
Машинным эпсилоном называется наименьшее положительное
число ε такое, что
1  ε ≠ 1,
где  − машинное сложение.
Пример:
Пусть даны два числа: a и b = a + γ.
Если γ = a·λ < a·ε, то с точки зрения машины a = b.
a < a + γ < a·(1  λ) < a·(1  ε)
1  λ = 1, если λ < ε.
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
57
Программа поиска машинного эпсилона
#include <stdio.h>
Результаты работы:
int main()
{
Число делений на 2: 24
float e,e1;
Машинный эпсилон: 5.960464e-08
int k=0;
e=1.0;
do
{
e=e/2.0;
e1=e+1.0;
k++;
} while (e1>1.0);
printf("Число делений на 2: %d\n", k);
printf("Машинный эпсилон: %e\n", e);
return 0;
}
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
58
Влияние точности вычислений на результат
Одним из наглядных примеров влияния на результат арифметики с
ограниченной разрядностью является нарушение некоторых аксиом.
Аксиома ассоциативности: (a + b) + c = a + (b + c)
#include <stdio.h>
int main()
{
float a = -1.99998e5, b = 1.99997e5, c = 1.3;
float x1 = a
x1 = x1 + c;
float x2 = b
x2 = x2 + a;
printf("x1 =
printf("x1 }
+ b;
+ c;
%f, x2 = %f, ",x1, x2);
x2 = %f\n", x1 - x2);
$ ./float_assoc
x1 = 0.300000, x2 = 0.296875, x1 - x2 = 0.003125
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
59
Алгоритм сложения чисел
с плавающей точкой (по Д. Кнуту)
Задача: найти число ω = υ  ν, p-разрядная арифметика
а : (2p + 1) разрядный аккумулятор
1 input υ, ν
p = 3, υ = 0,0185, ν =1.51
2 υ  (eυ , ± f υ) и ν  (eν , ± f ν)
υ=(-1,+0.185), ν=(1,+0.151)
3 if eν > eυ then
1 > -1
4
υ=(1,+0.115) , ν= (-1,+0.185)
υ  ν (eν  eυ и f υ  f ν)
5 eω = eυ
eω = 1
6 if (eυ − eν)  p + 2 then
eυ − eν = 1 – (-1) = 2 < p +2=5
7
fω = fυ
8 else
fν = fν >>(eυ − eν), a= fν /b(eυ − eν)
a = 0.185 >> 100 = 0.00185
9 a = fυ + a, fω = окр(a, p)
a = 0.151 + 0.00185 =0.15285
f ω = окр(0.15285,3) = 0,153
10 (eω , ± fω)  ω
ω = (1,153)
11 normalize(ω)
normalize(ω) = (1,153)
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
60
Алгоритм сложения чисел
с плавающей точкой (по Д. Кнуту)
Задача: найти число ω = υ  ν, p-разрядная арифметика
а : (2p + 1) разрядный аккумулятор
1 input υ, ν
p = 3, υ = -0,00009, ν =0.1
2 υ  (eυ , ± f υ) и ν  (eν , ± f ν)
υ=(-4,-0.9), ν=(0,+0.1)
3 if eν > eυ then
1 > -4
4
υ=(0,+0.1), ν= (-4,-0.9)
υ  ν (eν  eυ и f υ  f ν)
5 eω = eυ
eω = 0
6 if (eυ − eν)  p + 2 then
eυ − eν = 0 – (-4) = 4 < p +2=5
7
fω = fυ
8 else
fν = fν >>(eυ − eν), a= fν /b(eυ − eν)
a = 0.9 >> 10000 = -0.00009
a = 0.1 - 0.00009 = 0.09991
9 a = fυ + a, fω = окр(a, p)
f ω = окр(0.09991,3) = 0,0999
10 (eω , ± fω)  ω
ω = (0,0.999)
normalize(ω) = (-1,0.999)
11 normalize(ω)
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
61
Алгоритм сложения чисел
с плавающей точкой (по Д. Кнуту)
Задача: найти число ω = υ  ν, p-разрядная арифметика
а : (2p + 1) разрядный аккумулятор
1 input υ, ν
p = 3, υ = -0,000009, ν =0.1
2 υ  (eυ , ± f υ) и ν  (eν , ± f ν)
υ=(-5,-0.9), ν=(0,+0.1)
3 if eν > eυ then
1 > -5
4
υ=(0,+0.1), ν= (-5,-0.9)
υ  ν (eν  eυ и f υ  f ν)
5 eω = eυ
eω = 0
6 if (eυ − eν)  p + 2 then
[eυ − eν = 0 – (-5) = 5] = [p +2=5]
7
fω = fυ
По алгоритму: ω = υ
Пусть это не так, тогда:
8 else
a = 0.9 >> 100000 = -0.000009
(e
−
e
)
ν
υ
fν = fν >>(eυ − eν), a= fν /b
a = 0.1 - 0.000009 = 0.099991
9 a = fυ + a, fω = окр(a, p)
f ω = окр(0.099991,3) = 0,1
ω = (0,0.1)
10 (eω , ± fω)  ω
normalize(ω) = (0,0.1)
normalize(ω)
11
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
62
Алгоритм нормализации чисел
с плавающей точкой (по Д. Кнуту)
Задача: обеспечить для числа ω = (eω , ± f ω), f ω < b
выполнение условия: 1/b ≤ | f ω | < 1
normalize(ω)
1 ω  (e , ± f) // распаковать
2 if f = 0 then e = emin
3 else
4
while f ≤ 1/b do
5
f = f · b, e = e − 1
6
while | f | ≥ 1
7
f = f / b, e = e + 1
8
окр( f , p ) // округлить до p разр.
9
if e > emax then переполнение порядка
10
if e < emin then исчезновение порядка
11 (e , ± f)  ω // упаковать
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ»
// машинный ноль!
1/b ≤ | f |
1/b ≤ | f | < 1
63
Download