Главная /
Ассемблер /
Для чайников /
Введение /
Представление данных /
Вещественные числа /
Представление вещественных чисел в памяти компьютера
Для представления вещественных чисел в памяти компьютера часть разрядов отводится
для записи порядка числа, а остальные – для записи мантиссы (см. раздел
Нормализованная запись числа).
Если это число со знаком, то старший бит отводится для знака. Но в этом формате есть
один подводный камень – знак может иметь не только число, но и порядок числа также
может иметь знак (то есть степень дроби может быть как положительной, так и отрицательной).
Чтобы не хранить знак порядка, был придуман смещённый порядок.
Если для задания порядка выделено k разрядов, то к истинному значению порядка
прибавляют смещение, таким образом, смещённый порядок определяется по формуле:
СП = ИП + 2k-1 – 1
где СП – смещённый порядок,
ИП – истинный порядок,
k – количество разрядов, выделенных для порядка
Например, истинный порядок, лежащий в диапазоне –127…+128 представляется смещённым порядком,
значения которого меняются в диапазоне 0…255.
То есть при ИП = -127:
СП = -127 + 28-1 - 1 = -127 + 128 - 1 = 0
При ИП = 128:
СП = 128 = 128 + 28-1 – 1 = 128 + 128 - 1 = 255
Для представления числа в диапазоне 0…255 требуется 1 байт (8 разрядов),
то есть k = 8.
Алгоритм представления вещественного числа в памяти компьютера
- Перевести число из Р-ичной системы в двоичную
- Представить двоичное число в нормализованной экспоненциальной форме
- Рассчитать смещённый порядок числа
- Разместить знак, порядок и мантиссу в соответствующие разряды
А теперь попробуем сделать это с нашим многострадальным числом ПИ:
3,14 = 3 + 0,14
3 = 11b
Теперь преобразуем дробную часть числа:
0,14 < 1/2, поэтому старший разряд равен 0
0,14 < 1/4, поэтому следующий разряд также равен 0
0,14 > (1/8 = 0,125), поэтому следующий разряд равен 1
0,14 – 0,125 = 0,015
0,015 < (1/16 = 0,0625), поэтому следующий разряд равен 0
0,015 < (1/32 = 0,03125), поэтому следующий разряд равен 0
0,015 < (1/64 = 0,015625), поэтому следующий разряд равен 0
0,015 > (1/128 = 0,0078125), поэтому следующий разряд равен 1
0,015 – 0,0078125 = 0,0071875
0,0071875 > (1/256 = 0,00390625), поэтому следующий разряд равен 1
Если вам не всё понятно, вернитесь к разделу
Преобразование дробной части числа.
На этом, пожалуй, остановимся. Получилось, что число 0,14 в двоичной записи
приблизительно равно
0,14 = 0,00100011b