Хранение в ЭВМ дробных чисел
Для хранения дробных чисел в ЭВМ используется нормализованное двоичное число с плавающей точкой. Всякое число с плавающей точкой состоит из двух частей: мантиссы и порядка. Мантисса содержит значащие цифры, а с помощью порядка указывается положение двоичной точки. Обе части числа хранятся вместе в четырех (короткий формат) или в восьми (длинный формат) последовательных байтах. Представление числа включает в себя: — знак числа; — значение порядка; — значение мантиссы. Рассмотрим хранение дробного числа в коротком формате (рис. 2.5).
Рис. 2.5 Знак числа (на рисунке он обозначен символом Зн) представлен одним битом и равен 0, если число - положительное, и равен 1, если число -отрицательное. Для хранения порядка выделяется 8 битов (7 битов первого байта и один старший бит второго байта числа). Порядок числа представляется в двоичной системе счисления. С помощью восьми битов можно представлять числа от 0 до 255. Это означает, что значением порядка является целое число от -128 до 127. Для того чтобы не хранить знак порядка, последний представляется с избытком - смещенный порядок. Показателем избытка (смещение порядка) является число 127. Значение смещенного порядка образуется сложением значения действительного порядка с показателем избытка.
Мантисса представляется в двоичной системе счисления и занимает 23 двоичных разряда (короткий формат). Точка всегда подразумевается перед самым левым битом. Соответственно этому значения цифр представляются в двоичных позициях мантиссы слева направо: 2-1,2-2,..., 2-23. Числа хранятся в нормализованном виде и мантисса принимает значения на полусегменте [1,2). Рассмотрим процесс нормализации числа. Первоначально порядок считается равным 0, а его код в представлении числа равен 127 (0+127). Первый случай: число меньше 1. Процесс нормализации заключается в сдвиге разделительной точки числа вправо и в одновременном уменьшении значения порядка на число сдвигов до тех пор, пока мантисса не будет располагаться на полусегменте [1,2). Второй случай: число больше или равно 2. Процесс нормализации заключается в сдвиге разделительной точки числа влево и в одновременном увеличении значения порядка на число сдвигов до тех пор, пока мантисса не будет располагаться на полусегменте [1,2). Третий случай: число располагается на полусегменте [1,2). В этом случае нормализация не требуется. Если число нормализовано, то старший бит мантиссы всегда равен 1 и поэтому в его хранении нет необходимости. Отрицательные дробные числа не представляются в дополнительном коде. В этом случае знак числа равен 1. В длинном формате представляются числа с повышенной точностью. При этом все число занимает 8 байтов, из которых для представления мантиссы используются 55 битов. Процедура получения представления дробного числа, заданного в десятичной системе счисления, следующая: 1. переведем исходное десятичное число в двоичную систему счисления. При переводе определим точность перевода, для этого рассмотрим 2 случая: 1.1. Абсолютная величина исходного числа больше либо равна единице. В
этом случае точность перевода m определяется из следующего равенства: m+n+ 1=25; m – точность перевода кол-ва, разрядов дробной части и искомого 2 числа; n +1 – кол-во разрядов в целой части и искомого двоичного числа; m =24- n; n – номер старшего разряда. Для того чтобы определить точность перевода m, необходимо перевести целую часть, затем определить номер старшего разряда n и затем воспользоваться выражением m =24- n, для определения точности перевода. 1.2. Значение десятичного исходного числа по абсолютной величине меньшей единицы. Для определения точности перевода необходимо подсчитать количество нулей, которые получаем в дробной части искомогодвоичного числа, расположенных между разделительной точкой и первой единицей. Эту единицу можно отыскать, просматривая искомое число от разделительной точки вправо. Количество нулей – l. 0.00…01… Тогда точность перевода m будет выражаться как m = l +25. 2. Округление числа. Для того чтобы округлить число, нужно к полученному числу прибавить единицу. По весу равной единице младшего разряда. Младший разряд равен – m. После выполнения сложения разряд – m отбрасывается. 3. Нормализация числа. В результате нормализации необходимо получить число, которое будет располагаться на полусегменте от 1 до 2-x: [1;2), т.е. x ≥1, но x <2. Это достигается путем перемещения разделительной точки, при этом изменение значения числа компенсирует изменение порядка. Значение порядка равно нулю (к =0). 3.1. Если значение числа ≥2, то разделительная точка перемещается влево. При этом значение порядка возрастает на величину равную кол-ву разрядов, на которых переместится разделительная точка. 3.2. Исходное число <1, в этом случае разделительная точка перемещается вправо, значение порядка уменьшается на величину равную кол-ву разрядов, на которых переместится разделительная точка. В результате будет получено число, целая часть которого равна единице. Единицу целой части можно не хранить, ее всегда можно восстановить. А оставшаяся дробная часть числа (мантисса) будет содержать 23 двоичного разряда. В результате нормализации будет получен абсолютный порядок числа. 4. Нахождение смещенного порядка. Для нахождения смещенного порядка необходимо к найденному абсолютному порядку прибавить число 127, затем полученное десятичное число необходимо перевести в двоичную систему счисления и дополнить двоичное число незначащими нулями до разрядности 8. Полученный порядок называется смещенным. Max значение смещенного порядка 255, min=0, т.е. смещенный порядок хранится в формате целого двоичного числа с фиксирующей точкой без знака. Абсолютный порядок может принимать значение от -127 до +128, т.е.(-127,128).
5. Разместим число в памяти. В 7 бите 0 байта будет располагаться знак числа, если число отрицательно, то знак числа равен 1, в противном случае равен 0. Смещенный порядок занимает 8 бит и размещается с 0 по 6 бит 0-го байта и в 7 бите 1-го байта. Мантисса числа занимает 23 бита и занимает с 0 по 6 бит 1-го байта и 23 байт полностью. . Пример 2.14. Представим в памяти ЭВМ десятичное число 10.6.
1. Переведем число из десятичной системы счисления в двоичную систему счисления: 10.610= 1010.(1001)2 =1010.1001100110011001100112. 2. Округлим число: +1010.1001100110011001100112 0.000000000000000000001 2 1010.1001100110011001101002.
3. Нормализуем число: 1010.100110011001100110102= 1.010100110011001100110102 ∙2310. 4. Отбросим старший разряд: 1.01010011001100110011010 →.01010011001100110011010. 5. Определим двоичный код порядка: 310+ 12710= 13010=100000102.
6. Определим знаковый разряд: знаковый разряд положительного числа равен 0. Представление указанного числа в памяти ЭВМ показано на рис. 2.6 (шестнадцатеричное представление числа в памяти: 4129999а).
Рис. 2.6
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|