- •Раздел 3 Представление и обработка чисел в компьютере
- •1 В чем отличие позиционных и непозиционных систем счисления? Приведите примеры.
- •2На что указывает основание системы счисления
- •3Назовите алфавит двоичной, восьмеричной и шестнадцатеричной систем счисления
- •4Сформулируйте правила перевода чисел из одной системы счисления в другу
- •5Назовите форматы записи целых и вещественных чисел в памяти эвм.
- •1.1.3 Дополнительный код
- •Обратный код
- •Сложение в обратном коде
- •7Как выполняется сложение чисел в формате с фиксированной запятой
- •8Как выполняется сложение чисел в формате с плавающей запятой
- •9Как выполняется умножение чисел в формате с фиксированной запятой
- •10Как выполняется умножение чисел в формате с плавающей запятой
- •11Как выполняется деление чисел в формате с фиксированной запятой?
- •12Как получить код числа в формате с плавающей запятой по стандарту ieee 754.
- •13Как получить число по его коду в формате с плавающей запятой по стандарту ieee 754
- •14Как выполняется сложение чисел в формате с плавающей запятой по стандарту ieee 754?
- •15Пояснить сущность контроля работы цифровых автоматов по четности, по нечетности
- •16Пояснить сущность контроля работы цифровых автоматов по Хеммингу. Коды Хэмминга.
7Как выполняется сложение чисел в формате с фиксированной запятой
Сложение выполняется просто, если представить в уме, что мы должны сложить две десятичные дроби «в столбик» на листе бумаги. При выполнении данной операции числа записываются в столбик так, чтобы запятые, отделяющие дробную часть, располагались одна под другой. В двоичной арифметике подобная операция называется приведением экспонент. Если перейти от «бумажки» к математической записи, получится следующее: Пусть имеется два числа a = n1 * 2-q1 и b = n2 * 2-q2. Тогда: a + b = n1 * 2-q1 + n2 * 2-q2 = (n1 + n2 * 2(q1 — q2))*2-q1. Множитель 2(q1 — q2) при втором слагаемом по сути означает арифметический сдвиг для приведения чисел к одной экспоненте. Стоит отметить, что результат вычисления также может сдвигаться для приведения к требуемому значению экспоненты. Фрагмент кода на С:
int32_t a = 0x1000L; // q15: a = 0.125
int32_t b = 0x20000L; // q20: b = 0.125
int32_t c = 0; // q25
c = (a << 5) + b; // q20: (a * 2 ^ (20 - 15) + b); c = 0x40000L (0.25 в q20)
c <<= 5; // q25: c = 0x800000L (0.25 в q25)
Из примера может быть понятно, что в реальных вычислениях даже в такой простой операции как сложение, есть простор для раздумий. Всегда стоит держать в уме вопросы:
жертвовать точностью или нет? Можно ведь привести слагаемые к меньшей экспоненте сдвигом вправо и отбросить младшие разряды.
ограничены ли значения переменных? Сдвиг вправо в данном случае, например, не приводит к потере точности.
есть ли возможность расширить разрядность?
Это далеко не полный список, но уже показывает, что не все так просто, как может показаться на первый взгляд. В большинстве практических применений для каждой предметной области известны или могут быть получены диапазоны допустимых значений, так что при работе с фиксированной точкой требуется некоторый опыт или проведение исследований. Зачастую предварительно код пишется с плавающей запятой, после чего исследуются диапазоны значений, и малыми значениями пренебрегают.
8Как выполняется сложение чисел в формате с плавающей запятой
Формат чисел с плавающей запятой базируется на экспоненциальной форме записи:
А = m ´ qn,
где m – мантисса числа,
q – основание системы счисления,
n – порядок числа.
Для однозначности представления чисел с плавающей запятой используется нормализованная форма, при которой мантисса отвечает условию:
1/n ≤ |m| < 1,
т.е. мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля.
Преобразуем десятичное число 888,888 в экспоненциальную форму с нормализованной мантиссой:
Нормализованная мантисса m = 0,888888, порядок n = 3.
Число в форме с плавающей запятой занимает в памяти компьютера четыре байта (число обычной точности) или восемь байтов (число двойной точности).
При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.
Диапазон изменения чисел определяется количеством разрядов, отведенных для хранения порядка числа,
а точность (количество значащих цифр) определяется количеством разрядов, отведенных для хранения мантиссы.
