Что такое вещественные числа в информатике

Информатика

Викулин Максим Александрович

Лекция 4

Представление вещественных чисел в памяти вычислительной машины

Формы записи

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

Нормальная экспоненциальная форма

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

Для десятичной системы: –0,125625 × 10 3

Для двоичной системы: 10110,112 = 1,0110112 × 2 4

где 1,011011 — нормализованная мантисса;

4 — истинный порядок.

Форматы представления

Формат представления вещественных чисел (4 байта с нормализованной мантиссой и смещеным порядком):

single — 4 байта (минимальная длина машинного слова с плавающей точкой).

Существуют также более вместимые форматы:

Представление вещественных чисел

Смещенный порядок (СП) введен для того, чтобы хранить истинный порядок (ИП) в виде неотрицательного числа.

Смещение введено для того, чтобы СП гарантированно был неотрицательный. Для single смещение равно 127.

Содержание ячейки принято записывать в шестнадцатиричной системе. Формат single содержит 32 бита, то есть 8 знаков в шестнадцатиричной системе.

Примеры

Проведем нормализацию: –1,1111011012 × 2 6

СП = 127 + 6 = 133 = 100001012

11000010111110110.0

Примеры

Найти значение числа A = 43E3800016 (формат single).

010000111110001110.0

СП = 8716 = 128 + 7 = 135 = 127 + ИП ⇒ ИП = 8.

1,110001112 × 2 8 = 1110001112 = 1C716 = 455

Примеры

Представить число A = 0,0625 в типе single.

0011110110.0

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

Для сложения или вычитания двух представлений чисел необходимо:

Умножение и деление

Для умножения или деления двух представлений чисел необходимо:

Особенности представления в формате single

1111111111.1

Максимальное значение: 1,11111111111111111111111 × 2 127

0111111111.1

Машинный ноль

Существует машинный ноль (окрестность целого числа 0), в которой находятся вещественные числа, не имеющие машинного представления в вещественной форме.

Например, возможно такая ситуация: a + b = a, где a, b > 0.

Неравномерность распределения

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

Источник

Кодирование вещественных чисел. Нормализованное представление числа

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

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

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

Здесь степени 11 и 10 – это двоичная форма десятичных чисел 3 и 2.

Нормализованная форма представления числа – это одна из форм множества вариантов экспоненциальной формы записи числа.

Пусть слово состоит из 2 байт, два слова – это 4 байта или 32 бита.

Нормализированное число одинарной точности, представленное в формате с плавающей точкой, записывается в память следующим образом: знак числа – в бите 15 первого слова (0 – для положительных и 1 – для отрицательных чисел); порядок размещается в битах 7-14 первого слова, а мантисса занимает остальные 23 бита в двух словах (с 0 по 6 бит первого слова и все биты второго слова). Нормализированное число двойной точности записывается в четыре слова памяти и отличается от представления чисел с одинарной точностью только тем, что продолжение мантиссы размещается в следующих за первым словом трех последовательных словах памяти, а всего под мантиссу в этом случае отводится 55 бит.

Следует иметь в виду, что, хотя для мантиссы отведено 23 разряда для чисел одинарной точности и 55 разрядов – для чисел двойной точности, в операциях участвует 24 и 56 разрядов соответственно, т.к. старший разряд мантиссы нормализированного числа не хранится, т.е. имеет место так называемый скрытый разряд. Однако при аппаратном выполнении операций этот разряд автоматически восстанавливается и учитывается. Порядок числа также учитывает скрытый старший разряд мантиссы.

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

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

При выполнении арифметических операций над числами, представленными в формате с плавающей точкой, надо отдельно выполнять их для порядков и мантисс. При алгебраическом сложении чисел надо сначала уравнять порядки слагаемых. При умножении порядки надо складывать, а мантиссы — перемножать. При делении из порядка делимого вычитают порядок делителя, а над мантиссами совершают обычную операцию деления. После выполнения операций, если это необходимо, проводят нормализацию результата, что влечет изменение порядков, т.к. каждый сдвиг на один разряд влево соответствует уменьшению порядка на единицу, а сдвиг вправо увеличению на единицу. Введение термина «плавающая точка» как раз и объясняется тем, что двоичный порядок, определяющий фактическое положение точки в изображении числа, корректируется после выполнения каждой арифметической операции, т.е. точка в изображении числа «плавает» (изменяется ее положение) по мере изменения данной величины. А в изображении чисел, представленных в формате с фиксированной точкой, она жестко зафиксирована в определенном месте.

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

Источник

Что такое вещественные числа в информатике

Или в экспоненциальной форме, например:

5.0000000000E + 00 = 5 * 10 0 = 5.0

5.0000000000E + 01 = 5 * 10 1 = 50.0

6.3710421431E + 03 = 6.3710421431 * 10 3 = 6371.0421431

2. Представление вещественных чисел в компьютере. Форматный вывод вещественных чисел

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

2.1. Представление вещественных чисел в компьютере

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

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

Рис. 1. Представление машинного числа в формате с плавающей точкой.

При выводе на экран дисплея вещественных чисел оператором Write (); индицируются числа в формате с плавающей точкой (экспоненциальная форма).

2.2. Форматный вывод вещественных чисел

Для вывода вещественного числа на экран дисплея или на твердый носитель (бумага) необходимо определить формат выводимого числа, т.е количество цифр до десятичной точки и количество цифр после десятичной точки.

Форматный вывод вещественных чисел определяет количество выводимых чисел, включая десятичную точку и количество чисел после десятичной точки.

Все необходимые инструкции для этого описываются в операторе Write (), например, Write ( c :5:2);, а это значит, что выводится переменная c в виде пяти цифровых символов, один из которых точка, две цифры выводится до десятичной токи и две после точки.

2.3. Арифметические операции над вещественными числами.

Источник

Представление вещественных чисел

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

Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые знак (англ. sign), порядок (англ. exponent) и мантиссу (англ. mantis). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа ( [math]0[/math] — если число положительное, [math]1[/math] — если число отрицательное). При этом порядок записывается как целое число в коде со сдвигом, а мантисса — в нормализованном виде, своей дробной частью в двоичной системе счисления. Вот пример такого числа из [math]16[/math] двоичных разрядов:

Знак
ПорядокМантисса
0000000000000000
141090

Знак — один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:

Порядок также иногда называют экспонентой или просто показателем степени.

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

Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда [math]X[/math] бит и на дробную отводится всегда [math]Y[/math] бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.

Содержание

Нормальная и нормализованная форма [ править ]

Типы чисел с плавающей точкой (по IEEE 754) [ править ]

Число половинной точности (Binary16, Half precision) [ править ]

Число́ полови́нной то́чности — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — [math]16[/math] бит или [math]2[/math] байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.

Знак
ПорядокМантисса
0000001,0000000000
141090

Число одинарной точности (Binary32, Single precision, float) [ править ]

Число́ одина́рной то́чности — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — [math]32[/math] бита или [math]4[/math] байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.

Знак
Порядок (8 бит)Мантисса (23+1 бита)
0000000001,00000000000000000000000
3023220

Число двойной точности (Binary64, Double precision, double) [ править ]

Число́ двойно́й то́чности — компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — [math]64[/math] бита или [math]8[/math] байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.

Знак
Порядок
(11 бит)
Мантисса
(52+1 бит)
0000000000001,0000000000000000000000000000000000000000000000000000
6252510

Число четверной точности (Binary128, Quadruple precision) [ править ]

Число́ четверно́й то́чности — компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — [math]128[/math] бит или [math]16[/math] байт). Используется в случае необходимости крайне высокой точности.

Знак
Порядок
(15 бит)
Мантисса
(112+1 бит)
00000000000000001,0000000000000000000000000000000000000000000000
126112111
Мантисса
(112+1 бит)
000000000000000000000000000000000000000000000000000000000000000000
0

Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью). В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.

Диапазон значений чисел с плавающей запятой [ править ]

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

Особые значения чисел с плавающей точкой [ править ]

Ноль (со знаком) [ править ]

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

Знак
ПорядокМантисса
0 /1000001,0000000000= [math]\pm0[/math]
141090

Арифметика нуля со знаком
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:

Неопределенность (NaN) [ править ]

NaN — это аббревиатура от фразы «not a number«. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка — единицы, а мантисса не нулевая.

Знак
ПорядокМантисса
0 /1111111,0 /10 /10 /10 /10 /10 /10 /10 /10 /10 /1= [math]NaN[/math]
141090

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

Как можно получить NaN?

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

По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.

Бесконечности [ править ]

Знак
ПорядокМантисса
0 /1111111,0000000000= [math]\pm\infty[/math]
141090

Денормализованные числа [ править ]

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

В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale «Quantifying the Interference Caused by Subnormal Floating-Point Values» [1]

ПроизводительПроцессорЗамедление (разы)
IBMPowerPC 9702,4
AMDAthlon6,0
IntelPentium 315,8
AMDAthlon 6421,4
AMDOpteron6423,8
IntelCore Duo44,2
IntelP4 Xeon97,9
IntelPentium 4131,0
IntelItanium 2183,2
SunUltraSPARC IV520,0

В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.

Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно очень маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние Flush-to-zero (FTZ) и Denormals-are-zero (DAZ). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули.
Ярким примером подобного «отсечения» денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.

В версии стандарта IEEE 754-2008 денормализованные числа (denormal или denormalized numbers) были переименованы в subnormal numbers, то есть в числа, меньшие «нормальных». Поэтому их иногда еще называют «субнормальными«.

Действия с числами с плавающей запятой [ править ]

Умножение и деление [ править ]

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

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

Сложение и вычитание [ править ]

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

Алгоритм получения представления вещественного числа в памяти ЭВМ [ править ]

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

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

ЗнакСмещённый порядокМантисса
6362..5251..0

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

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

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

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

    0011111111101100011000000000000000000000000000000000000000000000
    6362..5251..0

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *