Представление вещественных чисел в эвм
Вещественные числа представляются в форме числа с плавающей запятой (точкой) вида:
где M– мантисса (значащая часть числа);n– основание системы счисления;P– порядок числа.
Пример 5.7. Число 2,5 ×10 18 имеет мантиссу равную 2,5, а порядок равный 18. □
Мантисса называется нормализованной, если ее абсолютное значение лежит в диапазоне:
где n– основание системы счисления.
Это условие означает, что первая цифра после запятой не равна нулю, а абсолютное значение мантиссы не превышает единицы.
Число с нормализованной мантиссой называется нормализованным.
Пример 5.8. Представить числа –245,62 и 0,00123 в форме числа с плавающей точкой.
Решение. Число –245,62 можно представить в форме числа с порядком –245,62 ×10 0 . Мантисса этого числа не нормализована, поэтому поделим его на 10 3 , увеличив при этом порядок:
В результате число –0,24562 ×10 3 нормализовано.
Число 0,00123 в форме числа с порядком 0,00123 ×10 0 не нормализовано, так как не нормализована мантисса. Умножим мантиссу на 10 2 , уменьшив при этом порядок:
В результате число 0,123 ×10 –2 нормализовано. □
В данном примере для нормализации мантиссы запятая сдвигалась вправо или влево. Поэтому такие числа называют числами с плавающей точкой. В отличие от чисел с фиксированной точкой, они значительно ускоряют арифметические операции, при этом каждый раз необходимо нормализовывать мантиссу чисел с плавающей точкой.
Для основанного на стандарте IEEE-754 представления вещественного числа в ЭВМ используютсяm + p + 1 бит, распределяемые следующим образом (Рис. 5 .5): 1 разряд знака мантиссы;pразрядов порядка;mразрядов мантиссы.
Рис. 5.5. Структура общего формата числа с плавающей точкой
Это представление называется (m, p)-форматом.
Диапазон представления чисел X(m, p)-форматом определяется из неравенства:
При этом порядок числа Pдолжен удовлетворять условию –2 p – 1 + 1£P£ 2 p – 1 – 1
Для вещественных чисел в стандарте IEEE-754 используются (23,8)- и (52,11)-форматы, называемые одинарным и двойным вещественными форматами соответственно (табл. 5 .2).
Чтобы представить значение этих порядков, количество секунд, прошедших с момента образования планеты Земля, составляет всего 10 18 .
Правило 5.5. (перевод десятичных чисел в (m, p)-формат) Алгоритм перевода десятичного числаXв (m, p)-формат состоит из следующих шагов.
1. Если Х = 0, то принять знаковый разряд, порядок и мантиссу за ноль и закончить алгоритм.
2. Если X > 0, то принять знаковый разряд 0, иначе принять 1. Знаковый разряд сформирован.
3. Перевести целую и дробную часть абсолютного значения числа Xв двоичную систему счисления. Если число дробное, то получитьm+ 1 разрядов. Принять порядок равный нулю.
Таблица 5.2. Сравнительные характеристики вещественных форматов
Смещение порядка 2 p – 1 – 1
Количество значащих десятичных цифр мантиссы
Диапазон десятичных порядков
4. Если X ³ 1, то перенести запятую влево до самого старшего разряда и увеличить порядок, иначе перенести запятую вправо до первого ненулевого (единичного) разряда и уменьшить порядок.
5. Если число разрядов дробной части меньше m, то дополнить дробную часть нулями справа доmразрядов. Отбросить единицу из целой части. Мантисса сформирована.
6. Прибавить к порядку смещение 2 p – 1 – 1 и перевести порядок в двоичную систему счисления. Порядок сформирован. Код, в котором представлен порядок, называется смещенным. Смещенный порядок упрощает сравнение, сложение и вычитание порядков при арифметических операциях.
7. Записать знаковый разряд, порядок и мантиссу в соответствующие разряды формата.
Пример 5.9. Представить число –25,6875 в одинарном вещественном формате.
Решение. В примере Error: Reference source not found был произведен перевод абсолютного значения числа –25,6875 в двоичную систему и было получено 9 разрядов:
Нормализуем число, сдвинув запятую влево и повысив порядок:
После отбрасывания целой части остается 23 разряда дробной части (в соответствии с форматом (23,8)), записываемые как мантисса:
Порядок равен 4 (степень двойки после сдвига запятой влево). Произведем его смещение и перевод в двоичную систему счисления:
4 + 127 = 131 = 100000112.
Число –25,6875 отрицательное, следовательно, знаковый разряд равен 1.
Все готово для представления числа –25,6875 в одинарном вещественном формате по схеме знаковый разряд + порядок + мантисса:
1 10000011 10011011000000000000000.
Разделим это число по 8 разрядов, сформируем байты и запишем их шестнадцатеричными числами:
Таким образом, число –25,6875 можно записать как C1CD8000. □
Как и форматы целых чисел, форматы вещественных чисел хранятся в памяти ЭВМ в обратном порядке следования байт (сначала младшие, потом старшие).
Арифметические операции над числами с плавающей точкой осуществляются в следующем порядке.
При сложении (вычитании) чисел с одинаковыми порядками их мантиссы складываются (вычитаются), а результату присваивается порядок, общий для исходных чисел. Если порядки исходных чисел разные, то сначала эти порядки выравниваются (число с меньшим порядком приводится к числу с большим порядком), а затем выполняется операция сложения (вычитания) мантисс. Если при выполнении операции сложения мантисс возникает переполнение, то сумма мантисс сдвигается влево на один разряд, а порядок суммы увеличивается на 1.
При умножении чисел их мантиссы перемножаются, а порядки складываются.
При делении чисел мантисса делимого делится на мантиссу делителя, а для получения порядка частного из порядка делимого вычитается порядок делителя. При этом если мантисса делимого больше мантиссы делителя, то мантисса частного окажется больше 1 (происходит переполнение) и запятую следует сдвинуть влево, одновременно увеличив порядок частного.