No Image

Что такое представление вещественных чисел

СОДЕРЖАНИЕ
0 просмотров
11 марта 2020

Принципиальное отличие между вещественными и целыми числами: целые числа дискретны, и отсюда (если не брать во внимание эффект переполнения) каждому целому числу соответствует уникальный двоичный код; вещественные числа, напротив, непрерывны, а значит, не могут быть полностью корректно перенесены в дискретную по своей природе вычислительную машину. Это означает, что некоторые вещественные числа, незначительно отличающиеся друг от друга, могут иметь одинаковый код.

Отбрасывание младших двоичных разрядов при переходе ко внутреннему двоичному представлению приводит к появлению специфической "машинной" погрешности.

Существует два способа представления вещественных чисел: с фиксированной и с плавающей запятой. Однако в связи с тем, что первый способ сейчас практически не используется, найти понятное его описание в современных учебниках довольно трудно.

В старых машинах, использовавших фиксированное размещение запятой, положение последней в разрядной сетке ЭВМ было заранее обусловлено – раз и навсегда для всех чисел и для всех технических устройств. Поэтому отпадала необходимость в каком-либо способе ее указания во внутреннем представлении чисел. Все вычислительные алгоритмы были заранее "настроены" на это фиксированное размещение.

Итак, подробное рассмотрение представления чисел с фиксированным размещением запятой не только показало его недостатки, но и неявно наметило путь их устранения.

В самом деле, если наиболее сложным и трудоемким местом является масштабирование данных, надо его автоматизировать. Иными словами, надо научить машину самостоятельно размещать запятую так, чтобы числа при счете по возможности не выходили за разрядную сетку и сохранялись с максимальной точностью. Для этого, разумеется, придется разрешить ЭВМ "перемещать" запятую, а значит, дополнительно как-то сохранять в двоичном представлении числа ее текущее положение. В этом, собственно, и заключается представление чисел с плавающей запятой.

Интересно, что удобное представление вещественных чисел не пришлось специально придумывать. В математике уже существовал подходящий способ записи, основанный на том факте, что любое число A в системе счисления с основанием Q можно записать в виде:

A = (± M) x Q ± P .

где M называют мантиссой, а показатель степени Pпорядком числа.

Например, 0,03 = 3 х 10 -2 = 30 х 10 -3 = 0,3 х 10 -1 = 0,03 х 10 0 = . То есть, представление числа с плавающей запятой не является единственным. Поэтому договорились для выделения единственного варианта записи числа считать, что мантисса всегда меньше единицы, а ее первый разряд содержит отличную от нуля цифру– в нашем примере обоим требованиям удовлетворит только число 0,3 х 10 -1 .

Описанное представление чисел называется нормализованным и является единственным. Любое число может быть нормализовано. Особо подчеркнем, что требования к нормализации чисел вводятся исходя из соображений обеспечения максимальной точности их представления.

Все сказанное о нормализации можно применять и к двоичной системе:

Например: — 3 10 = — 0,11 x 2 10 , M = 0,11 и P = 10.

Существенно, что двоичная мантисса всегда начинается с единицы. Поэтому во многих ЭВМ эта единица не записывается в ОЗУ, что позволяет сохранить еще один дополнительный разряд мантиссы (так называемая скрытая единица).

Арифметика чисел с плавающей запятой оказывается заметно сложнее, чем с фиксированной. Например, чтобы сложить два числа с плавающей запятой, требуется предварительно привести их к представлению, когда оба порядка равны; такую процедуру принято называть выравниванием порядков. Кроме того, в результате вычислений нормализация часто нарушается, а значит необходимо ее восстанавливать. Тем не менее, вычислительные машины со всем этим великолепно умеют автоматически справляться, и именно такой способ вычислений лежит в основе работы современных компьютеров.

Таким образом, мы видим, что при использовании метода представления вещественных чисел с плавающей запятой фактически хранится два числа: мантисса и порядок. Разрядность первой части определяет точность вычислений, а второй – диапазон представления чисел.

Разъясним сказанное выше на примере. Например, 120100000 = 1,201 × 10 8 . Поскольку каждая позиция десятичного числа отличается от соседней на степень числа 10, умножение на 10 эквивалентно сдвигу десятичной запятой на одну позицию вправо. Аналогично деление на 10 сдвигает десятичную запятую на позицию влево. Поэтому приведенный выше пример можно продолжить: 120100000 = 1,201 × 10 8 = 0,1201 × 10 9 = 12,01 × 10 7 . Десятичная запятая "плавает" в числе и больше не помечает абсолютное место между целой и дробной частями.

Для того чтобы сохранить максимальную точность, вычислительные машины почти всегда хранят мантиссу в нормализованном виде, что означает, что мантисса в данном случае есть число, лежащее между 1(10) и 2(10) (1 -39 ..1,7×10 38

Читайте также:  Вырезать часть экрана ножницы
11-12 Single 1,5×10 -45 ..3,4×10 38 7-8 Double 5,0×10 -324 ..1,7×10 308 15-16 Extended 3,4×10 -4932 ..1,1×10 4932 19-20

Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double.

Как видно из таблицы, величина это типа занимает в памяти 8 байт. На рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):

S Смещенный порядок Мантисса
62..52 51..0

Можно заметить, что старший бит, отведенный под мантиссу, имеет номер 51, т.е. мантисса занимает младшие 52 бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна 1, здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка хранится здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает 11 бит и имеет диапазон от 2 -1023 до 2 1023 , поэтому смещение равно 1023(10) = 1111111111(2). Наконец, бит с номером 63 указывает на знак числа.

Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ:

1. Перевести модуль данного числа в двоичную систему счисления;

2. нормализовать двоичное число, т.е. записать в виде M × 2 p , где M — мантисса (ее целая часть равна 1(2)) и p — порядок, записанный в десятичной системе счисления;

3. прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;

4. учитывая знак заданного числа (0 — положительное; 1 — отрицательное), выписать его представление в памяти ЭВМ.

Пример 2. Запишем код числа -312,3125.

1. Двоичная запись модуля этого числа имеет вид 100111000,0101.

2. Проведем нормализацию, получим 100111000,0101 = 1,001110000101 × 2 8 .

3. Находим смещенный порядок: 8 + 1023 = 1031. Далее имеем 1031(10) = 10000000111(2).

62..52 51..0

Очевидно, что более компактно полученный код стоит записать следующим образом: C073850000000000(16).

Пример 3. Обратный переход от кода действительного числа к самому числу.

Пусть дан код 3FEC600000000000(16) или

62..52 51..0

1. Прежде всего замечаем, что это код положительного числа, поскольку в разряде с номером 63 записан нуль. Получим порядок этого числа: 01111111110(2) = 1022(10); 1022 — 1023 = -1.

2. Число имеет вид 1,1100011 × 2 -1 или 0,11100011.

3. Переводом в десятичную систему счисления получаем 0,88671875.

Таким образом, если сравнить между собой представление целых и вещественных чисел, то станет отчетливо видно, как сильно различаются числа, скажем, 3 и 3,0. Поэтому не стоит удивляться тому, что в языках программирования проблема перевода чисел из одной формы в другую имеет определенные особенности.

Дата добавления: 2014-01-11 ; Просмотров: 1591 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Система вещественных чисел в математических вычислениях предполагается непрерывной и бесконечной, т.е. не имеющей ограничений на диапазон и точность представления чисел. Однако в компьютерах числа хранятся в регистрах и ячейках памяти с ограниченным количеством разрядов. В следствие этого система вещественных чисел, представимых в машине, является дискретной (прерывной) и конечной.

При написании вещественных чисел в программах вместо привычной запятой принято ставить точку. Для отображения вещественных чисел, которые могут быть как очень маленькими, так и очень большими, используется форма записи чисел с порядком основания системы счисления. Например, десятичное число 1.25 в этой форме можно представить так:

1.25 . 10 0 = 0.125 . 10 1 = 0.0125 . 10 2 = .

12.5 . 10 -1 = 125.0 . 10 -2 = 1250.0 . 10 -3 = . .

Любое число N в системе счисления с основанием q можно записать в виде N = M . q p , где M — множитель, содержащий все цифры числа (мантисса), а p — целое число, называемое порядком. Такой способ записи чисел называется представлением числа с плавающей точкой.

Если "плавающая" точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведённых под мантиссу, обеспечивается запись максимального количества значащих цифр числа, то есть максимальная точность представления числа в машине. Из этого следует:

Читайте также:  Microsoft photo story для windows 10

Мантисса должна быть правильной дробью, у которой первая цифра после точки (запятой в обычной записи) отлична от нуля: 0.12 . 10 3 ;

– 101.01 = – 0.10101 . 2 11 (порядок 112 = 310) – 0.000034 = – 0.34 . 10 -4 ; 0.000011 = 0.11 . 2 -100 (порядок —1002 = —410).

Вещественные числа в компьютерах различных типов записываются по-разному, тем не менее, все компьютеры поддерживают несколько международных стандартных форматов, различающихся по точности, но имеющих одинаковую структуру следующего вида:

Здесь порядок n-разрядного нормализованного числа задается в так называемой смещенной форме: если для задания порядка выделено k разрядов, то к истинному значению порядка, представленного в дополнительном коде, прибавляют смещение, равное (2 k-1 — 1). Например, порядок, принимающий значения в диапазоне от —128 до +127, представляется смещенным порядком, значения которого меняются от 0 до 255.

Использование смещенной формы позволяет производить операции над порядками, как над беззнаковыми числами, что упрощает операции сравнения, сложения и вычитания порядков, а также упрощает операцию сравнения самих нормализованных чисел.

Чем больше разрядов отводится под запись мантиссы, тем выше точность представления числа. Чем больше разрядов занимает порядок, тем шире диапазон от наименьшего отличного от нуля числа до наибольшего числа, представимого в машине при заданном формате.

Стандартные форматы представления вещественных чисел:

1) одинарный – 32-разрядное нормализованное число со знаком, 8-разрядным смещенным порядком и 24-разрядной мантиссой (старший бит мантиссы, всегда равный 1, не хранится в памяти, и размер поля, выделенного для хранения мантиссы, составляет только 23 разряда).

2) двойной – 64-разрядное нормализованное число со знаком, 11-разрядным смещенным порядком и 53-разрядной мантиссой (старший бит мантиссы не хранится, размер поля, выделенного для хранения мантиссы, составляет 52 разряда).

3) расширенный – 80-разрядное число со знаком, 15-разрядным смещенным порядком и 64-разрядной мантиссой. Позволяет хранить ненормализованные числа.

Следует отметить, что вещественный формат с m-разрядной мантиссой позволяет абсолютно точно представлять m-разрядные целые числа, т. е. любое двоичное целое число, содержащее не более m разрядов, может быть без искажений преобразовано в вещественный формат.

Выполнение арифметических действий
над нормализованными числами

К началу выполнения арифметического действия операнды операции помещаются в соответствующие регистры АЛУ.

Сложение и вычитание

При сложении и вычитании сначала производится подготовительная операция, называемая выравниванием порядков.

В процессе выравнивания порядков мантисса числа с меньшим порядком сдвигается в своем регистре вправо на количество разрядов, равное разности порядков операндов. После каждого сдвига порядок увеличивается на единицу.

В результате выравнивания порядков одноименные разряды чисел оказываются расположенными в соответствующих разрядах обоих регистров, после чего мантиссы складываются или вычитаются. В случае необходимости полученный результат нормализуется путем сдвига мантиссы результата влево. После каждого сдвига влево порядок результата уменьшается на единицу.

Пример 1. Сложить двоичные нормализованные числа 0.10111 . 2 -1 и 0.11011 . 2 10 . Разность порядков слагаемых здесь равна трем, поэтому перед сложением мантисса первого числа сдвигается на три разряда вправо:

Пример 2. Выполнить вычитание двоичных нормализованных чисел 0.10101 . 2 10 и 0.11101 . 2 1 . Разность порядков уменьшаемого и вычитаемого здесь равна единице, поэтому перед вычитанием мантисса второго числа сдвигается на один разряд вправо:

Результат получился не нормализованным, поэтому его мантисса сдвигается влево на два разряда с соответствующим уменьшением порядка на две единицы:
0.1101 . 2 0 .

Умножение

При умножении двух нормализованных чисел их порядки складываются, а мантиссы перемножаются.

Пример 3. Выполнить умножение двоичных нормализованных чисел:

(0.11101 . 2 101 ) . (0.1001 . 2 11 ) = (0.11101 . 0.1001) . 2 (101+11) = 0.100000101 . 2 1000 .

Деление

При делении двух нормализованных чисел из порядка делимого вычитается порядок делителя, а мантисса делимого делится на мантиссу делителя. Затем в случае необходимости полученный результат нормализуется.

Пример 4. Выполнить деление двоичных нормализованных чисел:

0.1111 . 2 100 : 0.101 . 2 11 = (0.1111 : 0.101) . 2 (100-11) = 1.1 . 2 1 = 0.11 . 2 10 .

Использование представления чисел с плавающей точкой существенно усложняет схему арифметико-логического устройства.

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой.

Читайте также:  Microsoft surface pro 4 i7 8gb

ФБГОУ ВПО "Новосибирский государственный технический университет"

Главная страница / 4. Кодирование (представление) данных в . 4.2. Представление в комп.

Форматы хранения вещественных чисел

Вещественные числа в математических вычислениях не имеют ограничений на диапазон и точность представления чисел. Однако в компьютерах числа хранятся в регистрах и ячейках памяти с ограниченным количеством разрядов. Поэтому точность представления вещественных чисел , представимых в машине, является конечной, а диапазон ограничен .

При написании вещественных чисел в программах вместо привычной запятой принято ставить точку. Любое вещественное число можно представить в форме записи чисел с порядком основания системы счисления.

Пример 4.4. Десятичное число 1.756 в форме записи чисел с порядком основания системы счисления можно представить так:

1,756 · 10 0 = 0,1756 · 10 1 = 0,01756 · 10 2 = .

17,56 · 10 -1 = 175,6 · 10 -2 = 1756,0 · 10 -3 = . .

Представлением числа с плавающей точкой называется представление числа N в системе счисления с основанием q в виде:

где m — множитель, содержащий все цифры числа (мантисса), p — целое число, называемое порядком.

Если плавающая точка расположена в мантиссе перед первой значащей цифрой, то при фиксированном количестве разрядов, отведенных под мантиссу, обеспечивается запись максимального количества значащих цифр числа, т. е. максимальная точность представления числа в машине.

Если в мантиссе первая цифра после точки (запятой) отлична от нуля, то такое число называется нормализованным.

Мантиссу и порядок q -ичного числа принято записывать в системе с основанием q , а само основание — в десятичной системе.

Пример 4.5. Приведем примеры нормализованного представления числа в десятичной системе:

2178,01 = 0,217801 · 10 4

0,0045 = 0,45 · 10 -2

Примеры в двоичной системе:

10110,01 = 0,1011001 · 2 101 (порядок 1012 = 510)

Современными компьютерами поддерживаются несколько международных стандартных форматов хранения вещественных чисел с плавающей точкой, различающихся по точности, но все они имеют одинаковую структуру. Вещественное число хранится в трех частях: знак мантиссы, смещенный порядок и мантисса:

Смещенный порядок n -разрядного нормализованного числа вычисляется следующим образом: если для задания порядка выделено k разрядов, то к истинному значению порядка, представленного в дополнительном коде, прибавляют смещение, равное (2 k -1 — 1).

Таким образом, порядок, принимающий значения в диапазоне от -128 до +127, преобразуется в смещенный порядок в диапазоне от 0 до 255. Смещенный порядок хранится в виде беззнакового числа, что упрощает операции сравнения, сложения и вычитания порядков, а также упрощает операцию сравнения самих нормализованных чисел.

Количество разрядов, отводимых под порядок, влияет на диапазон от наименьшего отличного от нуля числа до наибольшего числа, представимого в машине при заданном формате. Очевидно, что чем больше разрядов отводится под запись мантиссы, тем выше точность представления числа. В связи с тем, что у нормализованных вещественных чисел старший бит мантиссы всегда равен 1, этот старший бит не хранится в памяти.

Любое двоичное целое число, содержащее не более m разрядов, может быть без искажений преобразовано в вещественный формат.

Таблица 4.3. Стандартные форматы представления вещественных чисел

Формат Что хранится Кол-во битов, отводимых под смещенный порядок Кол-во битов, отводимых под мантиссу
Одинарный 32-разрядное нормализованное число со знаком 8 23
Двойной 64-разрядное нормализованное число со знаком 11 52
Расширенный 80-разрядное число со знаком (возможно ненормализованные) 15 64

Пример 4.6. Представление нормализованных чисел в одинарном формате.

Проиллюстрируем, как будет храниться число 37,1610. При переводе в двоичное число не получается точного перевода: 100101,(00101000111101011100) — дробная часть, заключенная в скобках, повторяется в периоде.

Переводим число в нормализованный вид:

0,100101(00101000111101011100) · 2 110

Представим вещественное число в 32-разрядном формате:

  1. Знак числа «+», поэтому в знаковый разряд (31) заносим 0.
  2. Для задания порядка выделено 8 разрядов, к истинному значению порядка, представленного в дополнительном коде, прибавляем смещение (2 7 — 1) = 127. Так как порядок положительный, то прямой код порядка совпадает с дополнительным, вычислим смещенный порядок: 00000110 + 01111111 = 10000101. Заносим полученный смещенный порядок.
  3. Заносим мантиссу, при этом старший разряд мантиссы убираем (он всегда равен 1).
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Знак Смещенный порядок Мантисса

В данном примере мы смогли перенести только 24 разряда, остальные были утеряны с потерей точности представления числа.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
No Image Компьютеры
0 комментариев
Adblock detector