Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Razdel_3_Predstavlenie_i_obrabotka_chisel_v_kom...docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
107.43 Кб
Скачать

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.

Число в форме с плавающей запятой занимает в памяти компьютера четыре байта (число обычной точности) или восемь байтов (число двойной точности).

При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.

Диапазон изменения чисел определяется количеством разрядов, отведенных для хранения порядка числа,

а точность (количество значащих цифр) определяется количеством разрядов, отведенных для хранения мантиссы.