Скачать презентацию Компьютерная арифметика Кодирование информации 10 класс Арифметика Скачать презентацию Компьютерная арифметика Кодирование информации 10 класс Арифметика

предст_чисел в компьютере 10 кл.pptx

  • Количество слайдов: 71

Компьютерная арифметика Кодирование информации 10 класс Компьютерная арифметика Кодирование информации 10 класс

Арифметика целых чисел Представление целых чисел в компьютере Арифметика целых чисел Представление целых чисел в компьютере

Представление целых положительных чисел Простейшими числовыми типами данных являются целые числа. Поскольку любое целое Представление целых положительных чисел Простейшими числовыми типами данных являются целые числа. Поскольку любое целое число является и вещественным, но с нулевой дробной частью, можно было использовать для любых вычислений только вещественные числа. Однако, в целях: эффективного расходования памяти; повышения быстродействия; введения операции деления нацело с остатком вместо приводящего к потере точности обычного деления вещественных чисел. Целые числа представляются с помощью специально для них предназначенных целых типов.

Представление целых положительных чисел Большинство задач, решаемых на компьютере сводится к операциям над целыми Представление целых положительных чисел Большинство задач, решаемых на компьютере сводится к операциям над целыми числами. Для компьютерного представления целых чисел используется несколько различных типов данных, отличающихся друг от друга количеством разрядов и наличием или отсутствием знакового разряда. Чаще всего используется восьми-, шестнадцати- и тридцатидвухразрядное представление чисел (один, два и четыре байта соответственно).

чисел в беззнаковых целых типах Все разряды в таких типах отводятся для записи двоичного чисел в беззнаковых целых типах Все разряды в таких типах отводятся для записи двоичного представления целого положительного числа (левый бит для старшего разряда, а правый для младшего). Диапазон допустимых значений однозначно определяется количеством разрядов. Пусть число записывается в ячейку из k разрядов. Тогда минимальное число, которое можно записать в k разрядах будет состоять из k нулей, т. е. это число 0. Максимальное число будет состоять из k единиц. Это число в десятичной системе счисления равно 2 k-1 + 2 k-2 + … +22 +2 + 1 = (2 k-1× 2 – 1)/(2 -1) = 2 k-1 (формула суммы геометрической прогрессии)

Представление положительных чисел в беззнаковых целых типах byte 8 7 6 5 4 3 Представление положительных чисел в беззнаковых целых типах byte 8 7 6 5 4 3 2 1 11112=28 -1=255 word 16 15 14 13 12 11 10 9 8 7 6 5 4 3 111111112=216 -1=65535 2 1

чисел в беззнаковых целых типах Таким образом, для беззнаковых типов нижняя граница диапазона всегда чисел в беззнаковых целых типах Таким образом, для беззнаковых типов нижняя граница диапазона всегда равна нулю, а верхняя граница зависит от количества разрядов, используемых в представлении числа данного типа. В Turbo-Pascal: кол-во бит максимальное значение название 8 255 (28 -1) byte 16 65535 (216 -1) word 32 4294967295 (232 -1) тип отсутствует

Представление положительных чисел в знаковых целых типах В знаковых целых типах старший разряд отводится Представление положительных чисел в знаковых целых типах В знаковых целых типах старший разряд отводится под кодирование знака: 0 – «+» , 1 – «−» . Остальные разряды остаются для кодирования числа. Представление числа в привычной форме «знак» - «величина» , при котором старший разряд ячейки отводится под знак, а остальные разряды ячейки под запись числа, называется прямым кодом. зн k k-1 3 2 1 Максимальное число = 2 k-1 -1 (в два раза меньше) k=8 (один байт) 27 -1=127 k=16 (два байта) 215 -1= 32767

Представление положительных чисел в знаковых целых типах Алгоритм представления целых положительных чисел: 1. целое Представление положительных чисел в знаковых целых типах Алгоритм представления целых положительных чисел: 1. целое положительное число, входящее в диапазон допустимых значений того или иного типа, переводится в двоичную систему счисления; 2. двоичное число дополняется, если это необходимо, слева нулями до соответствующего числа разрядов (8 -ми, 16 -ти, 32 -х или более); 3. полученное число записывается в этом числе разрядов так, что в самом левом разряде размещается самая старшая цифра, а в правом – младшая.

Представление положительных чисел в знаковых целых типах Пример 1 5310 = 1101012 8 -разрядное Представление положительных чисел в знаковых целых типах Пример 1 5310 = 1101012 8 -разрядное представление 0 0 1 16 -разрядное представление 0 0 0 0 0 1 1 0 1 Пример 2 20010=110010002 Представление в 8 -разрядном знаковом типе невозможно.

Представление целых отрицательных чисел Очевидно, что отрицательные целые числа представимы лишь в знаковых типах Представление целых отрицательных чисел Очевидно, что отрицательные целые числа представимы лишь в знаковых типах данных. Отрицательные числа представляются дополнительным кодом. Положительные числа всегда записываются с помощью прямого кода. Дополнительный код отрицательного числа m – это запись в k разрядах положительного числа 2 k-|m|, где |m| – модуль отрицательного числа. Дополнительный код положительного числа равен прямому коду положительного числа. В k-разрядной арифметике 2 k=0, поэтому дополнительный код – это дополнение |m| до 2 k или, в k-разрядной арифметике, до нуля (2 k- |m|+ |m|=0). Поэтому он называется дополнительным.

Представление целых отрицательных чисел Алгоритм получения дополнительного кода Для получения дополнительного k-разрядного кода отрицательного Представление целых отрицательных чисел Алгоритм получения дополнительного кода Для получения дополнительного k-разрядного кода отрицательного числа необходимо: 1. модуль числа представить прямым кодом в k двоичных разрядах; 2. значение всех бит инвертировать (все нули заменяются на единицы, а единицы на нули), таким образом получается k-разрядный обратный код исходного числа; 3. к полученному обратному коду, трактуемому как k -разрядное неотрицательное двоичное число, прибавить единицу.

Представление целых отрицательных чисел Пример Получим дополнительный код числа -11710 для 8 - и Представление целых отрицательных чисел Пример Получим дополнительный код числа -11710 для 8 - и 16 -разрядной ячейки. Для 8 -разрядной ячейки прямой код 0111 01012 обратный код 1000 10102 дополнительный код 1000 10112 Для 16 -разрядной ячейки прямой код обратный код дополнительный код 0000 0111 01012 1111 1000 10102 1111 1000 10112

Представление целых отрицательных чисел Примеры число прямой код обратный код дополнительный код -128 10000000 Представление целых отрицательных чисел Примеры число прямой код обратный код дополнительный код -128 10000000 01111111 -127 01111111 10000000 -0 0000 1111 10000000 10000001 0000 В k-разрядной целочисленной арифметике 2 k =0

Представление целых отрицательных чисел Алгоритм получения десятичного числа по его дополнительному коду Для получения Представление целых отрицательных чисел Алгоритм получения десятичного числа по его дополнительному коду Для получения исходного числа по его дополнительному коду необходимо: 1. из дополнительного кода вычесть единицу (в результате получим обратный код); 2. инвертировать полученный код (все нули заменить на единицы, единицы − на нули), получим модуль отрицательного числа; 3. перевести полученное значение в десятичную систему и перед полученной записью поставить знак «минус» .

Представление целых отрицательных чисел Пример Получим десятичное значение числа по его дополнительному коду 100101112. Представление целых отрицательных чисел Пример Получим десятичное значение числа по его дополнительному коду 100101112. 1) из дополнительного кода вычтем единицу _ 1001 0111 1 10010110 (получили обратный код) 2) инвертируем полученный код: 01101001 (получили модуль отрицательного числа) 3) переведем полученное значение в десятичную систему: 011010012=26+25+23+1=64+32+8+1=10510 7 6 5 4 3 2 1 0 Ответ: -105

Знаковые типы данных Целые числа со знаком для k-разрядных типов принадлежат диапазону [-2 k-1, Знаковые типы данных Целые числа со знаком для k-разрядных типов принадлежат диапазону [-2 k-1, 2 k-1 -1]. разрядность минимум максимум 8 16 32 -128 -32768 -2147483648 127 32767 2147483647 Для Delphi разрядность 32 64 название (Turbo Pascal) shortint integer longint название integer int 64

Организация арифметических действий в ограниченном числе разрядов Организация арифметических действий в ограниченном числе разрядов

Прибавление и вычитание единицы Наглядным представлением любого целого типа данных является: 1 0 255 Прибавление и вычитание единицы Наглядным представлением любого целого типа данных является: 1 0 255 8 -битный беззнаковый 1 0 65535 32768 16 -битный беззнаковый 1 0 -1 32767 -32768 16 -битный знаковый Результатом прибавления единицы в арифметике с фиксированным числом разрядов является следующее по часовой стрелке за исходным число в кольце, а результатом вычитания единицы – следующее число по ходу против часовой стрелки.

Прибавление и вычитание единицы Беззнаковые типы Максимальное число равно 2 k-1 и состоит из Прибавление и вычитание единицы Беззнаковые типы Максимальное число равно 2 k-1 и состоит из k единиц. При прибавлении к нему единицы получаем 2 k, что соответствует нулю в k-разрядной арифметике. Знаковые типы Вычитание из нуля единицы соответствует прибавлению к нулю минус единицы. По правилам k-разрядной арифметики минус единица − это дополнение единицы до 2 k, т. е. число, которое при сложении с единицей даст 2 k. Очевидно, это число 2 k-1, состоящее из k двоичных единиц. Значит, 0+(-1)=2 k-1, что равно максимальному значению в типе.

Прибавление и вычитание единицы Фактически, операции сложения, вычитания и умножения в k-битных беззнаковых типах Прибавление и вычитание единицы Фактически, операции сложения, вычитания и умножения в k-битных беззнаковых типах соответствует математическому понятию арифметические операции по модулю 2 k (сравнение по модулю 2 k).

Прибавление и вычитание произвольного числа n соответствует n единичным шагам вдоль кольца от исходного Прибавление и вычитание произвольного числа n соответствует n единичным шагам вдоль кольца от исходного числа в нужном направлении. Примеры 1 32767 1 8 -разрядный беззнаковый тип 0 0 -32768 255 -1 254+4=2 200− 255=201 16 -разрядный знаковый тип 32760+10= − 32766 − 32760 − 10=32766 Вычитание можно заменить на сложение с отрицательным числом, представляя последнее в дополнительном коде.

Прибавление и вычитание произвольного числа 254 11111110 200 11001000 4 00000100 − 255 00000001 Прибавление и вычитание произвольного числа 254 11111110 200 11001000 4 00000100 − 255 00000001 254+4 1|00000010 200− 255 11001001 результат 201

Ошибки При выполнении арифметических действий в целочисленной kразрядной арифметике возможно возникновение следующих ошибок: левые Ошибки При выполнении арифметических действий в целочисленной kразрядной арифметике возможно возникновение следующих ошибок: левые цифры результата, выходящие за отведенное количество разрядов, оказываются утерянными; при сложении двух положительных чисел, представленных в знаковом типе данных, можно получить отрицательное число, если в результате сложения в левом знаковом разряде окажется единица. Пример Выполним 100+51 в 8 -разрядном знаковом типе. 100=011001002 и 51=00112. При сложении получим 100101112. Получим отрицательное число в дополнительном коде. Тогда исходное число будет − 105. Таким образом, получим 100+51=− 105 в 8 -разрядной знаковой арифметике.

Упражнение Даны десятичные числа a=61 и b=105. Найти их сумму и разность в 8 Упражнение Даны десятичные числа a=61 и b=105. Найти их сумму и разность в 8 -разрядном беззнаковом и знаковом представлении. Решение 6110=1111012 8 -разрядный знаковый тип a+b + 00111101 01101001 дополнительный код - 10100110 1 10100101 обратный код 11011010 прямой код 10510=11010012 Переведем результат в десятичную систему 010110102= 26+24+23+21=9010 Ответ: − 90

Упражнение 6110=1111012 10510=11010012 a−b = a + (-b) Получим дополнительный код числа −b: 01101001 Упражнение 6110=1111012 10510=11010012 a−b = a + (-b) Получим дополнительный код числа −b: 01101001 прямой код 10010110 обратный код 10010111 дополнительный код Сложим число a с дополнительным кодом числа b 10010111 + 001111010100 дополнительный код 1 11010011 обратный код 00101100 прямой код Переведем результат в десятичную систему 001011002 = Ответ: − 44 25+23+22 = 4410

Упражнение 6110=1111012 10510=11010012 8 -разрядный беззнаковый тип a+b + 00111101 0110100110 Переведем результат в Упражнение 6110=1111012 10510=11010012 8 -разрядный беззнаковый тип a+b + 00111101 0110100110 Переведем результат в десятичную систему 101001102= 27+25+22+21=16610 Ответ: 166

Упражнение 6110=1111012 10510=11010012 a−b Получим дополнительный код числа −b: 01101001 прямой код 10010110 обратный Упражнение 6110=1111012 10510=11010012 a−b Получим дополнительный код числа −b: 01101001 прямой код 10010110 обратный код 10010111 дополнительный код Сложим число a с дополнительным кодом числа b 10010111 001111010100 Переведем результат в десятичную систему 110101002 = 27+26+ 24+22 = Ответ: 21210

Упражнение Результаты занесем в таблицу 10 -тичные 8 -битные беззнаковые a 61 00111101 61 Упражнение Результаты занесем в таблицу 10 -тичные 8 -битные беззнаковые a 61 00111101 61 61 b 105 01101001 105 a+b 166 10100110 166 − 90 a−b − 44 11010100 212 − 44

Битовые операции Битовые операции

Битовые операции 1. NOT − инверсия всех бит целого числа, т. е. все нули Битовые операции 1. NOT − инверсия всех бит целого числа, т. е. все нули в представлении числа заменяются на единицы, а единицы на нули. 2. AND, OR, XOR − побитовые операции «и» , «или» , и «исключающее или» . a b a and b a or b a xor b 0 0 0 1 0 1 1 1 0

Битовые операции Примеры 1. NOT not(3)=− 4 в знаковых типах (не зависит от количества Битовые операции Примеры 1. NOT not(3)=− 4 в знаковых типах (не зависит от количества разрядов в типе) 2. AND, OR, XOR 5 and 3 = 1012 and 112 = 1 5 or 3 = 1012 or 112 = 1112 = 7 5 xor 3 = 1012 xor 112 = 1102 = 6 Not(0000 0011) 1 1 100 --------0000 0 101 - 0000 01 101 and 0000 0011 or 1 1 10 1 xor 1 10000 10011 ----------0000 0100 = 4 ----------0000 0001 0111 -4 0000 0110

Битовые операции 3. Сдвиги числа в ячейке Сдвиг влево: I SHL J Сдвиг числа Битовые операции 3. Сдвиги числа в ячейке Сдвиг влево: I SHL J Сдвиг числа I на J разрядов влево, освободившиеся правые J разрядов заполняются нулями, что соответствует умножению на 2 j. Сдвиг вправо: I SHR J Сдвиг числа I на J разрядов вправо, освободившиеся левые J разрядов заполняются нулями, что соответствует целочисленному делению на 2 j.

Решение задач Задача 1. По введенному целому неотрицательному n получить значение 2 n. {решение Решение задач Задача 1. По введенному целому неотрицательному n получить значение 2 n. {решение для 0 ≤ n ≤ 31} var n, p: longint; begin readln (n); p: =1 shl n; writeln (‘ 2 в степени‘, n, ‘=‘, p); end.

Решение задач Задача 2. Перевести натуральное число, не превосходящее 109, в двоичную систему счисления. Решение задач Задача 2. Перевести натуральное число, не превосходящее 109, в двоичную систему счисления. Решение использует тот факт, что любое натуральное число хранится в компьютере в своем двоичном представлении. Поэтому достаточно узнать и напечатать значения всех его разрядов слева направо, опуская левые незначащие нули. Считаем, что все двоичные разряды в представлении двоичного числа n пронумерованы справа налево, начиная с нуля. Тогда значение i-го разряда равно нулю, если (1 shl i) and n = 0, т. к. 1 shl i представляет из себя число, в двоичном представлении которого присутствует всего одна единица в i-ом справа разряде. Если в этом разряде у числа n единицы нет, то результат указанной битовой операции and окажется нулевым.

Решение задач Задача 2. var n, k, i: longint; begin readln(n); write (n, ‘=‘); Решение задач Задача 2. var n, k, i: longint; begin readln(n); write (n, ‘=‘); k: =30; {максимальный разряд, в котором может быть 1} while (k>0) and (n and (1 shl k)=0) do k: =k-1; {пропускаем незначащие ведущие нули} for i: =k downto 0 do {печатаем значащие цифры} if n and (1 shl i)=0 then write (0) else write (1); writeln (‘(2)’); end.

Вещественные числа Вещественные числа

Нормализация чисел Если представлении целых чисел в компьютере ограничением может служить лишь величина записываемого Нормализация чисел Если представлении целых чисел в компьютере ограничением может служить лишь величина записываемого числа, то при записи вещественного числа в первую очередь речь идет о точности его представления, т. е. о количестве значащих цифр, которые удалось сохранить в ограниченном числе разрядов.

Нормализация чисел Пусть у нас есть калькулятор, в котором на экране дисплея для вывода Нормализация чисел Пусть у нас есть калькулятор, в котором на экране дисплея для вывода чисел есть только 10 знакомест (включая знак числа и десятичную точку). Необходимо выполнить действия со следующими числами: − 6392000000; − 639, 2; − 0, 0000006392; на дисплее такого калькулятора удастся отобразить лишь второе число. Можно представить числа иначе: − 6. 392 E+12; − 6. 392 E+02; − 6. 392 E − 08; где знак E читается как «умножить на десять в степени» . Такая запись отражает нормализованную форму записи чисел.

Нормализация чисел Нормализованная запись отличного от нуля действительного числа − это запись вида a Нормализация чисел Нормализованная запись отличного от нуля действительного числа − это запись вида a = ± m × p q, мантисса порядок где q − целое число (положительное, отрицательное или ноль), m − правильная p-ичная дробь, у которой первая цифра после запятой не равна нулю, т. е. 1/p ≤ m < 1. Условимся, что запись нуля является нормализованной, если и мантисса и порядок равны нулю.

Нормализация чисел В нормализованной форме все числа записываются одинаково в том смысле, что запятая Нормализация чисел В нормализованной форме все числа записываются одинаково в том смысле, что запятая у них ставится в одном и том же месте − перед первой (самой левой) значащей цифрой. Величина числа (ее порядок) указывается отдельно, с помощью соответствующей степени основания системы счисления. В результате количество значащих цифр может оказаться меньше, чем число значащих цифр в исходном числе.

Примеры: Нормализация чисел 0 = 0, 0 × 100 3, 1415926 = 0, 31415926 Примеры: Нормализация чисел 0 = 0, 0 × 100 3, 1415926 = 0, 31415926 × 101 1000 = 0, 1 × 104 0, 123456789 = 0, 123456789 × 100 0, 00001078 = 0, 1078 × 8− 4 1000, 00012 = 1, 000000012 × 24 AB, CDEF 16 = 0, ABCDEF 16 × 162 Так, как первая (левая) цифра мантиссы нормализованного числа отлична от 0, то в двоичной системе счисления старший бит значащей части равен 1. Поэтому общую форму записи нормализованного двоичного числа можно переписать в виде: a = 0, 1 m × 2 q 2

Точность представления В компьютерном представлении вещественных чисел с плавающей запятой максимально допустимое количество цифр Точность представления В компьютерном представлении вещественных чисел с плавающей запятой максимально допустимое количество цифр в мантиссе определяет точность, с которой может быть представлено число. Пример Пусть есть 10 знакомест для представления числа, мантисса имеет 4 цифры, порядок − две. 248, 53786 будет представлено как +0. 2485 E+03 Переведем в привычное представление с фиксированной запятой, получим +248, 5 Тогда погрешность представления составит 248, 53786 − 248, 5 = 0, 03786

Точность представления Разность между значением числа x и неким его представлением x* называется абсолютной Точность представления Разность между значением числа x и неким его представлением x* называется абсолютной погрешностью. Относительной погрешностью называют величину |x − x*| x Относительная погрешность не зависит от числа и определяется только количеством разрядов, отводимых под мантиссу при представлении числа. В компьютерной записи вещественных чисел с плавающей запятой количество цифр, отводимых под запись порядка, определяет как наибольшее, так и наименьшее представимое положительное число.

Представление вещественных чисел Как и для целых чисел, при представлении действительных чисел в компьютере Представление вещественных чисел Как и для целых чисел, при представлении действительных чисел в компьютере используется чаще всего двоичная система счисления, следовательно, предварительно десятичное число должно быть переведено в двоичную систему, а затем представлено в нормализованном формате с p=2. Независимо от используемых систем счисления существует два основных типа представления чисел в компьютере, называемые представлениями с фиксированной и плавающей запятой.

Представление вещественных чисел В типах данных, использующих представление чисел с фиксированной запятой, все разряды Представление вещественных чисел В типах данных, использующих представление чисел с фиксированной запятой, все разряды ячейки, кроме знакового разряда , служат для изображения разрядов чисел. Причем каждому разряду ячейки соответствует всегда один и тот же разряд числа, что и фиксирует место запятой перед определенным разрядом. Такая система упрощает выполнение арифметических действий, но сильно органичивает диапазон чисел, которые могут быть представлены в таком типе.

Представление вещественных чисел Поэтому для представления вещественных чисел в современных компьютерах формат данных с Представление вещественных чисел Поэтому для представления вещественных чисел в современных компьютерах формат данных с фиксированной запятой не применяется. Все целые типы данных представляются в компьютере в формате с фиксированной запятой. Положение запятой в них зафиксировано после самого правого разряда.

Представление вещественных чисел В современных компьютерах вещественные числа представляются в формате с плавающей запятой. Представление вещественных чисел В современных компьютерах вещественные числа представляются в формате с плавающей запятой. Этот способ представления опирается на нормализованную (экспоненциальную) запись. При представлении чисел с плавающей запятой часть разрядов ячейки отводится для записи порядка числа, остальные разряды − для записи мантиссы. По одному разряду в каждой группе отводится для изображения знака порядка и знака мантиссы. sq sm bk bk-1. . . b 2 b 1 a 2. . . an- an 1 sq − знак порядка, sm − знак мантиссы, b 1 -bk − разряды порядка, a 1 -an − разряды мантиссы.

Вещественные типы данных в Turbo-Pascal Название real Размер 6 байт single 4 байта double Вещественные типы данных в Turbo-Pascal Название real Размер 6 байт single 4 байта double 8 байт extended 10 байт comp 8 байт Точность 11 -12 зн. цифр 7 -8 зн. цифр 15 -16 зн. цифр 19 -20 зн. цифр Диапазон значений 10 -39 … 1038 10 -45 … 1038 10 -324 … 10308 10 -4951 … 104932 -9, 2∙ 1018 … 9, 2∙ 1018 Тип comp служит для записи только целых чисел. Операции над переменными такого типа производятся с помощью команд сопроцессора, предназначенных для вещественных чисел, а целочисленное деление с остатком не реализовано.

Вещественные типы данных В современных компьютерах арифметические операции над вещественными типами данных выполняются с Вещественные типы данных В современных компьютерах арифметические операции над вещественными типами данных выполняются с использованием сопроцессоров. Первые компиляторы с языка Turbo Pascal разрабатывались тогда, когда персональные компьютеры сопроцессоров не имели. Реализация арифметических операций над вещественными числами типа real с целью увеличения скорости выполнения операций организована с использованием операций процессора над целыми числами. Сопроцессорные вещественные типы различаются между собой, в основном, лишь количеством разрядов, отводимых под мантиссу и порядок.

Вещественные типы данных Для типа real з. м m (39 разрядов) 46 47 q+t Вещественные типы данных Для типа real з. м m (39 разрядов) 46 47 q+t (8 разрядов) 8 7 0 Для сопроцессорных типов q+t (k разрядов) з. м m (n разрядов) порядок мантисса Порядок в вещественных типах представляется с помощью положительного беззнакового числа, для этого используется сдвиг t.

Арифметические операции над числами с плавающей запятой Арифметические операции над числами с плавающей запятой

Сложение и вычитание При сложении и вычитании чисел сначала производится подготовительная операция, называемая выравниванием Сложение и вычитание При сложении и вычитании чисел сначала производится подготовительная операция, называемая выравниванием порядков. При выравнивании порядков мантисса числа с меньшим порядком сдвигается в своей ячейке вправо на количество разрядов, равное разности порядков данных чисел. После этой операции сложение и вычитание мантисс выполняется достаточно просто, так же как над числами с фиксированной запятой.

Сложение и вычитание Пример Предположим, что в ячейке памяти можно записать 1 десятичный разряд Сложение и вычитание Пример Предположим, что в ячейке памяти можно записать 1 десятичный разряд порядка и 5 десятичных разрядов мантиссы. Требуется сложить числа: 0, 23619 × 102 и 0, 71824 × 10 -2 После выравнивания порядков второе слагаемое будет преобразовано к виду 0, 00071824 × 102 Выполняется сложение мантисс 0, 23619 0, 00071824 0, 23690824 Результат получили с большим числом разрядов, чем вмещает ячейка, поэтому он округляется и записывается в памяти в виде 0, 23691 × 102

Сложение и вычитание Пусть a = ± 0, ma × 2 qa, b = Сложение и вычитание Пусть a = ± 0, ma × 2 qa, b = ± 0, mb × 2 qb два нормализованных двоичных числа, и qa ≥ qb (в противном случае можно просто поменять их местами). Результатом их сложения или вычитания будет: e = ( 0, ma ± 0, mb × 2 qa- q b) × 2 qa

Алгоритм компьютерного сложения (вычитания) двух вещественных чисел: 1. Порядки чисел a и b выравниваются Алгоритм компьютерного сложения (вычитания) двух вещественных чисел: 1. Порядки чисел a и b выравниваются по большему из них. Для этого мантисса числа b сдвигается на qa−qb разрядов вправо (часть значащих цифр при этом могут оказаться утерянными), а его порядок становится равным qa. 2. Выполняется операция сложения (вычитания) над мантиссами с округлением по значению n+1 -ой значащей цифры результата. 3. Мантисса результата должна быть нормализована (получившийся после нормализации порядок может отличаться от qa как в меньшую, так и в большую сторону).

Ошибки 1. Потеря значащих цифр мантиссы у меньшего из чисел при выравнивании порядков. В Ошибки 1. Потеря значащих цифр мантиссы у меньшего из чисел при выравнивании порядков. В худшем случае утерянными оказываются все значащие цифры и a + b = a, что является абсурдным с точки зрения математики, но возможным в компьютерной арифметике с ограниченным числом разрядов

Пример 1 Если в вещественном типе хранится 40 значащих цифр, то 0, 12 × Пример 1 Если в вещественном типе хранится 40 значащих цифр, то 0, 12 × 225 + 0, 12 × 2 -20 = (0, 12 + 0, 12 × 2 -20 -25) × 225 Так как при сдвиге мантиссы меньшего числа на 45 разрядов вправо она становится равной 0, то результат такого сложения окажется равным 0, 12 × 225 , т. е. первому слагаемому.

Ошибки 2. Потеря крайней справа значащей цифры результата при сложении или вычитании мантисс. При Ошибки 2. Потеря крайней справа значащей цифры результата при сложении или вычитании мантисс. При сложении и вычитании двух чисел количество значащих цифр может увеличиться лишь на одну. Это влияет на точность, но не на правильность результата. Пример 2 Для 15 -разрядных мантисс: 0, 111 110 000 011 1112 + 0, 100 100 10012 =1, 100 010 101 000 0112 То есть значащих цифр получилось уже 16, и после округления и нормализации получим результат 0, 110001010100010 × 21

Ошибки 3. Выход за границу допустимого диапазона значений того или иного вещественного типа при Ошибки 3. Выход за границу допустимого диапазона значений того или иного вещественного типа при нормализации результата. В данном случае получаемый порядок оказывается либо больше максимально возможного значения, либо меньше минимального. В данной ситуации чаще всего выполнение программы прерывается с сообщением об ошибке «арифметическое переполнение» . Пример 3 0, 1 × 2127 + 0, 1 × 2127 = 0, 1 × 2128 И если максимальный представимый порядок у вещественного типа равен 127 (как в типе real), результат окажется не представимым в данном типе.

Умножение и деление При умножении двух чисел с плавающей запятой их порядки складываются, а Умножение и деление При умножении двух чисел с плавающей запятой их порядки складываются, а мантиссы − перемножаются (предварительное выравнивание не производится). При делении из порядка делимого вычитается порядок делителя, а мантисса делимого делится на мантиссу делителя.

Умножение и деление Поскольку результат арифметических операций должен быть нормализованным числом, необходимо дополнительное преобразование Умножение и деление Поскольку результат арифметических операций должен быть нормализованным числом, необходимо дополнительное преобразование результата, называемое нормализацией. Мантисса результата сдвигается вправо или влево так, чтобы ее первая значащая цифра попала в первый разряд после запятой. Одновременно порядок результата увеличивается или уменьшается на число, равное величине сдвига.

Умножение и деление нормализованных чисел a и b в арифметике с ограниченным числом разрядов: Умножение и деление нормализованных чисел a и b в арифметике с ограниченным числом разрядов: d = a ∙ b = (0, m a ∙ 0, m b ) × 2 q a + q b ; f = a : b = (0, m a : 0, m b ) × 2 q a - q b;

Алгоритм компьютерного умножения (деления) двух вещественных чисел: 1. Мантиссы перемножаются (или одна делится на Алгоритм компьютерного умножения (деления) двух вещественных чисел: 1. Мантиссы перемножаются (или одна делится на другую), при этом результат округляется до n значащих цифр (отметим, что при умножении может получиться 2 n значащих цифр в мантиссе, а при делении − бесконечно много). 2. Порядки при умножении складываются, а при делении вычитаются. 3. При необходимости мантисса результата нормализуется.

Арифметические операции Над мантиссами выполняются все четыре арифметических операции, а также операции сдвига, тогда Арифметические операции Над мантиссами выполняются все четыре арифметических операции, а также операции сдвига, тогда как над порядками производятся только действия сложения и вычитания. Рассмотрим более подробно выполнение арифметических операций на примерах. Во всех примерах будем считать, что при записи вещественного числа в представлении с плавающей запятой один разряд отводится под десятичный порядок и пять разрядов − под десятичную мантиссу.

Примеры Пример 1 Сложить числа 0, 23619 × 108 + 0, 91824 × 108 Примеры Пример 1 Сложить числа 0, 23619 × 108 + 0, 91824 × 108 Выравнивания порядков не требуется. Складываем мантиссы 0, 23619 0, 91824 1, 15443 Получим результат 1, 15443 × 108 Нормализуем результат, получим 0, 11544 × 109

Пример 2 Умножить числа 0, 23000 × Примеры 103 * 0, 95000 × 107 Пример 2 Умножить числа 0, 23000 × Примеры 103 * 0, 95000 × 107 Умножим мантиссы: 0, 23000*0, 95000= 0, 21850 Сложим порядки: 3+7=10 Получим результат: 0, 21850 × 1010 Это число не поместится в отведенной ячейке. Порядок может содержать только одну цифру. Выполнение операции умножения над этими числами приведет к прекращению выполнения программы в связи с ошибкой: переполнение порядка.

Примеры Пример 3 Выполнить деление чисел 0, 92000 × 104 : 0, 30000 × Примеры Пример 3 Выполнить деление чисел 0, 92000 × 104 : 0, 30000 × 107 Разделим мантиссы, получим бесконечную периодическую дробь 3, 0(6). Следовательно, при формировании мантиссы результата произойдет его округление. Вычтем порядки, получим 4− 7=− 3 После нормализации получим результат 0, 30667 × 10 -2

Ошибки Основные ошибки, которые могут возникнуть при умножении (делении): 1. Получение не представимого в Ошибки Основные ошибки, которые могут возникнуть при умножении (делении): 1. Получение не представимого в используемом вещественном типе порядка, как положительного, так и отрицательного, т. е. «арифметическое переполнение» . 2. Для операции умножения возможна потеря младшей значащей цифры при сдвиге мантиссы на один разряд влево (самый правый разряд мантиссы при этом заполняется нулем, а не очередной значащей цифрой результата перемножения мантисс) с одновременным уменьшением порядка результата на единицу, а при делении может понадобиться сдвиг вправо, вместе с увеличением порядка результата на единицу.

Итоги 1. Уже на этапе записи чисел в компьютер возникают ошибки округления, которые при Итоги 1. Уже на этапе записи чисел в компьютер возникают ошибки округления, которые при выполнении арифметических действий нарастают. 2. Наличие погрешностей округления приводит к следующему правилу программирования: неразумно сравнивать в программе никакие два вещественных числа на точное равенство. 3. В результате вычитания возникают ненадежные значащие цифры, которые могут привести к серьезной потери точности ил получению недостоверного результата. 4. Добавление и вычитание малого числа може никак не сказаться на результате. 5. Получение очень больших чисел может вызвать переполнение порядка, а малых − отрицательное переполнение или исчезновение числа (превращение в ноль), это может привести к аварийному завершению программы.

Упражнение Упражнение