ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем ОСНОВЫ ПРОГРАММИРОВАНИЯ Системы счисления. Внутреннее целых и вещественных чисел. Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» Системы счисления © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 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.626110-27 может быть записана одним из следующих способов: 1) 66.26110-28 2) 6626110-31 3) 0.6626110-26 4) 0.0006626110-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 Двоичное представление 120 Результат упаковки (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 Двоичное представление -120 Результат упаковки (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 Двоичное представление 12-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