Главная /
Ассемблер /
Для чайников /
Введение /
Представление данных /
Вещественные числа /
Числа с фиксированной точкой
Числа с фиксированной точкой чаще всего имеют формат байта или слова.
Числа с плавающей точкой обычно «укладывают» в двойное слово или в учетверённое (расширенное)
слово (см. раздел Положительные числа).
Вспомним предыдущий раздел: мы получили двоичное представление целой и дробной частей числа Пи:
3 = 11b
0,14 = 0,00100011b
Итак, если бы у нас было число с фиксированной точкой, и мы бы использовали один
байт для записи целой части, а другой – для записи дробной части, то запись в
памяти компьютера получилась бы такой
Знак |
Целая часть |
Дробная часть |
0 |
0000011 |
00100011 |
Это уже правильная запись числа (в отличие от наших
предыдущих попыток))).
Таким образом, наше число 3,14159265359 после помещения в слово данных будет равно 3,14,
да ещё и приблизительно.
Это очень упрощённый пример представления числа с фиксированной точкой
(в реальных машинах это делается несколько иначе). В реальности для снижения погрешностей
используются специальные алгоритмы (мы же для упрощения просто подобрали дробную часть,
которая поместится в одном байте). Как мы видим, представление числа с фиксированной
запятой имеет недостатки:
- Высокая погрешность
- Нерациональное использование памяти
В чём заключается нерациональное использование памяти? Как мы видим, в нашем случае
для представления целой части достаточно всего двух битов, а мы используем семь,
потому что точка у нас фиксированная, то есть находится всегда в одном месте
(между двумя байтами слова). Из-за этого же страдает точность. А вот если бы
мы использовали для целого числа только два бита (в нашем случае), то мы бы могли для
записи дробной части уже использовать не 8 битов, а 8 + (7 – 2) = 13, то есть смогли
бы повысить точность дробной части.
Однако как быть, если целая часть числа будет занимать более 2 битов? Решение
этой проблемы нашли – сделали точку плавающей и несколько изменили принцип записи
числа в память.