No Image

Умножение чисел одинарной точности

СОДЕРЖАНИЕ
0 просмотров
10 марта 2020

Правила ввода чисел

  1. Числа в десятичной системе счисления могут вводиться как без дробной, так и с дробной частью ( 234234.455 ).
  2. Числа в двоичной системе счисления состоят только из цифр 0 и 1 ( 10100.01 ).
  3. Числа в шестнадцатеричной системе счисления состоят из цифр 0 . 9 и букв A . F .
  4. Можно также получать обратное представление кода (из шестнадцатеричной системы счисления в десятичную, 40B00000 )

Пример №2 . Представить двоичное число 101.102 в нормализованном виде, записать в 32-битом стандарте IEEE754.
Решение.
Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде.
Сдвинем число на 2 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:
Мантисса M=1.011
Экспонента exp2=2
Преобразование двоичного нормализованного числа в 32 битный формат IEEE 754.
Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0
Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту.
Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 2 + 127 = 129
Переведем экспоненту в двоичное представление.
Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M 22 *0 + 2 21 *1 + 2 20 *1 + 2 19 *0 + 2 18 *0 + 2 17 *0 + 2 16 *0 + 2 15 *0 + 2 14 *0 + 2 13 *0 + 2 12 *0 + 2 11 *0 + 2 10 *0 + 2 9 *0 + 2 8 *0 + 2 7 *0 + 2 6 *0 + 2 5 *0 + 2 4 *0 + 2 3 *0 + 2 2 *0 + 2 1 *0 + 2 0 *0 = 0 + 2097152 + 1048576 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 3145728
В десятичном коде мантисса выражается числом 3145728
В результате число 101.10 представленное в IEEE 754 c одинарной точностью равно 01000000101100000000000000000000.
Переведем в шестнадцатеричное представление.
Разделим исходный код на группы по 4 разряда.
010000001011000000000000000000002 = 0100 0000 1011 0000 0000 0000 0000 0000 2
Получаем число:
0100 0000 1011 0000 0000 0000 0000 0000 2 = 40B0000016

Число́ одина́рной то́чности (англ. single precision , single ) — широко распространенный компьютерный формат представления вещественных чисел, занимающий в памяти 32 бита (4 байта). Как правило, под ним понимают формат числа с плавающей запятой стандарта IEEE 754.

Читайте также:  Как посмотреть свой инвентарь в стиме

Числа одинарной точности с плавающей запятой обеспечивают относительную точность 7-8 десятичных цифр в диапазоне от 10 − 38 <displaystyle 10^<-38>> до примерно 10 38 <displaystyle 10^<38>> .

В современных компьютерах вычисления с числами с плавающей запятой поддерживаются аппаратным сопроцессором (FPU — англ. floating point unit ). Однако во многих вычислительных архитектурах нет аппаратной поддержки чисел с плавающей запятой и тогда работа с ними осуществляется программно.

Знак
Порядок Мантисса
1 1 1 1 1 1 = 0,15625
31 24 23 16 15 8 7

Для вычисления показателя степени из восьмиразрядного поля порядка вычитается смещение порядка равное 12710 = 7F16 = 011111112 (то есть, 011111002 — 011111112 = 12410 — 12710 = -310). Так как в нормализованной двоичной мантиссе целая часть всегда равна единице, то в поле мантиссы записывается только её дробная часть. Для вычисления мантиссы к единице добавляется дробная часть мантиссы из 23-х разрядного поля дробной части мантиссы 1,010000000000000000000002. Число равно произведению мантиссы со знаком на двойку в степени порядка = 1,012*210 -310 = 1012*210 -510 = 510*210 -510 = 0,1562510.

Содержание

Общий шаблон для побитового доступа [ править | править код ]

Результирующая формула расчёта (число одинарной точности) будет s * (m * 2 ^ -23) * (2 ^(e-127)) .

Примеры использования [ править | править код ]

Python [ править | править код ]

Конвертирует целочисленное представление числа с одинарной точностью (в виде четырёх байт, младшие вначале) во встроенный тип действительных чисел Python’а.

0.1562510 в формате float записывается как 3E200000 16, что эквивалентно четырём байтам: [0x00,0x00,0x20,0x3E]. Вывод программы:

Примеры чисел одинарной точности [ править | править код ]

Эти примеры представлены в шестнадцатеричном виде чисел с плавающей запятой. Они включают знаковый бит, порядок и мантиссу.

По умолчанию, 1/3 округляется вверх, в отличие от чисел двойной точности.

Сложение чисел с плавающей запятой

Если имеются два числа в нормальной форме: Х1 = m1 10 p1 и Х2 = m2 10 p2 , то для того чтобы их можно было сложить, нужно предварительно привести их к одному и тому же порядку Робщ, т. е. преобразовать одно из слагаемых, например, первое следующим образом:

Читайте также:  Режим сети для андроид

Далее можно вынести степень основания системы за скобки и произвести сложение мантисс: Х1 + Х2= m1 * 10 pобщ. + m2 10 pобщ. = (m1 * + m2 ) 10 pобщ.

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

Машинная операция сложения чисел в нормальной форме распадается таким образом, на 4 этапа:

1. Уравниваются порядки слагаемых: меньший порядок увеличивается до большего, мантисса преобразуемого числа сдвигается вправо (число денормализуется) на соответствующее количество разрядов. Практически в машинах производится вычитание порядков операндов. Знак и модуль разности Р1 — Р2 определяют соответственно, какое из слагаемых нужно преобразовывать и на сколько единиц следует сдвигать мантиссу преобразуемого числа.

2. Производится преобразование мантисс слагаемых в один из модифицированных кодов.

3. Мантиссы слагаемых суммируются по правилам сложения дробных чисел с фиксированной запятой.

4. В случае надобности мантисса суммы переводится в прямой код, производится нормализация суммы и округление ее мантиссы.

ПРИМЕР. Используя дополнительный код, сложить два числа:

[m1] мод = 11,01011; [m1] мод = 11,100111.

[m3] мод = 110, 111101

отбрасывается запрещенная комбинация

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

Произведем нормализацию суммы вправо

[m3] мод = 10, 111101 1,0111101

Робщ = 0,101 + 0,001 = 0,110

Далее переводим сумму в прямой код и производим округление ее мантиссы до пяти разрядов.

Умножение чисел с плавающей запятой

Если имеем два сомножителя, заданные в нормальной форме Х1 = m1 10 p1 и Х2 = m2 10 p2 , то их произведение определяется следующим образом:

Анализ этого соотношения показывает, что умножение чисел в машинах с плавающей запятой производится в четыре этапа:

1. Определение знака произведения путем сложения по модулю два знаковых цифр мантисс сомножителей.

2. Перемножение модулей мантисс сомножителей по правилам для дробных чисел с фиксированной запятой.

3. Определение порядка произведения путем алгебраического сложения порядков сомножителей с использованием либо дополнительного, либо обратного модифицированного кода.

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

Читайте также:  Live usb с утилитами

ПРИМЕР. Перемножить числа с плавающей запятой.

1. Знак произведения 1 + 0 = 1.

2. Перемножаем модули мантисс:

1-й шаг ,0000 0000 — нулевая сумма

+,0000 1010 — 1-е частичное произведение

2-й шаг ,0000 1010 — 2-я сумма

+ ,0000 0000 — 2-е частичное произведение

3-й шаг ,0000 1010 — 3-я сумма

+ ,0010 1000 — 3-е частичное произведение

4-й шаг ,0011 0010 — 4-я сумма

+ ,0101 0000 — 4-е частичное произведение

, 1000 0010 — модуль произведения мантисс.

Находим порядок произведения:

1] мод = 00,101

Производим округление мантиссы произведения.

Вопрос 13: Двоично-десятичная система кодирования. Соответствие двоично-десятичного кода и десятичных цифр. Сложение двоично десятичных чисел.

Двоично-десятичный код — форма записи рациональных чисел, когда каждый десятичный разряд числа записывается в виде его четырёхбитного двоичного кода.

Например, десятичное число 31110 будет записано в двоичной системе счисления в двоичном коде как 1 0011 01112, а в двоично-десятичном коде как 0011 0001 0001BCD.

Двоично-десятичные числа складывают по правилам двоичного сложения. Однако двоичное сложение может иногда давать неверный результат и тогда приходится выполнять коррекцию результата.

Вопрос 14: Переполнение разрядной сетки машины.

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

Запишем числа А и В в пяти битах

Вопрос 15: Представление алфавитно-цифровой информации (коды ASCII и ДКОИ).

Любая информация в ЭВМ представляется в виде двоичных кодов. Отдельный элемент двоичного кода, принимающий значение 0 или 1, называют битом. Бит является наименьшей единицей информации, которая может быть представлена в ЭВМ. Группа из восьми двоичных разрядов называется байтом. Более крупными единицами информации являются килобайт (1024 = 210 байт), мегабайт (1048576 = 220 байт), гигабайт (1073741824 = 230 байт).

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector