Представление в ЭВМ дробных чисел
Дробные числа (в информатике их чаще называют либо действительными, либо вещественными) - это такие числа, в машинном представлении которых может присутствовать дробная часть.
Перевод дробных чисел из двоичной системы в десятичную
Проблемы перевода будем рассматривать только для дробных частей чисел.
Любая двоичная дробь имеет десятичный эквивалент, т. е. точно переводится в десятичную систему. |
Действительно, двоичную дробь можно представить в виде:
(A)2=a-12-1+a-22-2+…=a-1/21+…+a-m/2m
Здесь ai - одна из цифр двоичной системы (0 или 1).
Приведем сумму к общему знаменателю 2m и умножим числитель и знаменатель на 5m. Получим
(a-12m-1+a-22m-2+…+a-m)/2m*5m/5m=
(a-12m-1+a-22m-2+…+a-m)*5m/10m
а это и есть десятичная дробь, поскольку в знаменателе стоит степень десятки.
Перевод дробных чисел из десятичной системы в двоичную
В общем случае десятичная дробь не имеет двоичный эквивалент, т. е. точно не переводится в двоичную систему. |
Очень часто мы об этом забываем, поскольку имеющейся точности перевода вполне хватает для решения наших задач. Однако возможны ситуации, которые не очень опытного пользователя могут поставить в тупик.
Эксперимент Вычислим в Excel набор значений функции для х от -4 до 4 с шагом -0,2. · Открыть книгу Excel. · В ячейку А1 записать число -4 —> в ячейку А2 записать число -3,8 —> выделить диапазон А1:А2 —> установить курсор мыши на маркер заполнения —> протянуть курсор до ячейки А41. · В ячейку В1 записать формулу "=(16-A1^2)^(1/2)" —> скопировать формулу в ячейки В1:В41. Видим, что в ячейке В41 вместо ожидаемого нуля стоит сообщение об ошибке. Щелкнув мышью в ячейке А41, в строке формул вместо ожидаемого значения 4 увидим 4,00000000000001 (!!!). Просто при последовательном прибавлении неточно переведенной в двоичную систему величины 0,2 набежала ошибка. Она уже заметна при значении х=1,8, ноне играла особой роли, пока не пришлось извлекать квадратный корень. И как быть? Можно, например, в ячейке А41 удалить 4 и записать 4. Вновь записанное значение будет уже точным, и ошибки извлечения корня не будет. Впрочем, с самого начала для заполнения диапазона А2:А41 можно было использовать прогрессию: выделить ячейку А1 —> установить курсор мыши на маркер заполнения —> нажать правую кнопку мыши —> протянуть курсор до ячейки А41 —> Прогрессия —> Тип: арифметическая —> шаг: 0,2 —> [ОК]. Надо полагать, что в приведенных двух вариантах реализованы разные механизмы вычисления очередного значения, что лишний раз напоминает о необходимости проявлять бдительность при выполнении расчетов с дробными числами. |
|
|
Представление дробных чисел в форме с фиксированной запятой
|
|
Эта форма предполагает строгую фиксацию запятой в определенном месте разрядной сетки числа.
Недостатком является потребность в большом количестве разрядов как для представления очень больших чисел, так и для представления очень малых чисел. Тем не менее она может найти применение в специализированных ЭВМ, в которых диапазон обрабатываемых чисел ограничен.
Представление дробных чисел в форме с плавающей запятой
Для представления дробных чисел используется так называемая полулогарифмическая форма
Aq = mqp =(p, m)q ,
где
q - основание системы счисления;
p - порядок;
m - мантисса.
Например, А=3,1415927. Вот варианты полулогарифмической формы:
(0,031415927×102)10 = (2; 0,031415927)10,
(3141,5927×10-3)10 = (-3; 3141,5927)10
и т. д. Видим, что для каждого числа существует бесконечное количество вариантов полулогарифмической формы.
Число называется нормализованным, если
т. е. 1) мантисса по абсолютному значению не превосходит 1 (это второе неравенство);
2) первая цифра мантиссы после запятой не равна нулю (это первое неравенство).
В нашем примере нормализованная форма числа А=0,31415927×101 = (1; 0,31425927).
Вот вариант представления нормализованного числа в ЭВМ:
|
|
Запятая не фиксирована в определенном месте разрядной сетки, т. е. как бы плавает, отчего такой способ представления получил название "форма с плавающей запятой".
Попробуем на конкретном примере оценить возможный диапазон представления чисел в форме с плавающей запятой.
Пусть длина числа - 4 байта (32 бита), в том числе:
- знак - 1 бит;
- порядок со знаком - 8 бит;
- мантисса - 23 бита.
Максимальная мантисса = 2-1+ 2-2+ ...+ 2-23 = 1- 2-23 (во всех битах 1, сумма подсчитана по формуле для арифметической прогрессии).
Максимальный порядок = 27=127 (т. к. из 8-ми бит порядка один бит- знак).
Следовательно, максимальное равно
(1- 2-23)´2127 @ 1,7´1038 .
Сомневающиеся могут запустить Калькулятор и выполнить вычисления.
Заглянув в справочники, для четырехбайтовых действительных увидим максимальное примерно равно 3,4´1038 .
Дата добавления: 2018-04-15; просмотров: 743; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!