101
правка
Изменения
Исправлена ошибка в таблице для Single precision, добавлен подробный пример для сложения
!style="background-color: powderblue; border: thin solid black; border-top: none"|
!colspan=8 style="background-color: lightgreen; border: thin solid black"|Порядок (8 бит)
!colspan=24 style="background-color: lightcoral; border: thin solid black"|Мантисса (2423+1 бита)
|-style="text-align: right"
!style="background-color: powderblue; border: thin solid black"|0
|style="border: none"|
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|30
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|2423
|style="border: none"|
|colspan=20 style="border: none; border-left: 1px solid gray; text-align: left"|2322
|colspan=3 style="border: none; border-right: 1px solid gray; text-align: right"|0
|}
== Действия с числами с плавающей запятой ==
=== Умножение и деление ===
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме мы умножаем необходимо перемножить их мантиссы друг на друга, а сложить порядки складываем. Затем округляем мантиссу, чтобы она поместилась в данное округлить и нормализовать полученное число бит и приводим результат к нормализованному виду. Вот простой пример<!-- Пример:
e=3; m=4.734612 (порядок и мантисса первого числа)
e=8; m=25.64854 (мантисса после округления)
e=9; m=2.564854 (нормализованная форма)
-->
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.
<!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата "вики-конспекта". лучше куда-нибудь сюда добавить внешнюю ссылку -->
=== Сложение и вычитание ===
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:
Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате -269 7/32 и 405,875.
Переведем -269 7/32 в машинный вид. Для этого сначала переведем его в двоичную систему счисления.
-269 7/32 = -269,21875
-269,21875<sub>10</sub> = -100001101,00111<sub>2</sub>
Нормализуем полученное двоичное число по правилам машинной арифметики.
-100001101,00111 = -1,0000110100111 × 10<sup>1000</sup>
Найдем смещенный порядок. Так как в условии говориться о 32-разрадном представлении, то смещение порядка равно 127<sub>10</sub>.
E = 8<sub>10</sub> + 127<sub>10</sub> = 1000<sub>2</sub> + 1111111<sub>2</sub> = 10000111<sub>2</sub>
Число отрицательное, следовательно, в бите знака будет стоять единица.
Итак, первое число в машинном 32-разрадном представлении с плавающей точкой будет иметь вид:
1<strong>10000111</strong>00001101001110000000000 (жирным шрифтом выделен порядок числа, длина мантиссы - 23 бита).
Переведем второе число в машинный вид, совершая те же действия.
405,87510 = 110010101,111<sub>2</sub> = 1,10010101111 × 10<sup>1000</sup>
Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.
Второе число положительное, следовательно, бит знака будет содержать ноль.
Итак в машинном 32-разрядном представлении второе число будет иметь вид:
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===