ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 42
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Представление чисел с плавающей точкой
Эта статья находится в разработке!
Содержание [убрать]
|
[править]Плавающая точка
Определение: |
Плавающая точка (floating point) - метод представления действительных чисел, при котором число хранится в виде мантиссы и показателя степени, а значение числа вычисляется по формуле: , где - число, - бит, отвечающий за знак числа, - мантисса, - основание степени, - показатель степени. |
Такой метод является компромиссом между точностью и диапазоном представляемых значений. Представление чисел с плавающей точкой рассмотрим на примере чисел двойной точности (double precision). Такие числа занимают в памяти два машинных слова (8 байт на 32-битных системах). Наиболее распространенное представление описано в стандарте IEEE 754.
Кроме чисел двойной точности также используются следующие форматы чисел:
-
половинной точности (half precision) (16 бит), -
одинарной точности (single precision) (32 бита), -
четверной точности (quadruple precision) (128 бит), -
расширенной точности (extended precision) (80 бит).
При выборе формата программисты идут на разумный компромисс между точностью вычислений и размером числа.
[править]Нормальная и нормализованная формы
Определение: |
Нормальной называется форма представления числа, при которой абсолютное значение мантиссы десятичного числа находится на полуинтервале . |
Недостатком такой записи является тот факт, что числа нельзя записать однозначно: .
Определение: |
Нормализованной называется форма представления числа, при которой абсолютное значение мантиссы десятичного числа лежит на полуинтервале , а двоичного на полуинтервале . |
[править]Числа двойной точности
Число с плавающей точкой хранится в нормализованной форме и состоит из трех частей (в скобках указано количество бит, отводимых на каждую секцию в формате double):
-
знак -
экспонента (показатель степени) (в виде целого числа в коде со сдвигом) -
мантисса (в нормализованной форме)
В качестве базы (основания степени) используется число . Экспонента хранится со сдвигом .
Знак | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Экспонента (11 бит) | Мантисса (52+1 бит) | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 000 | ||
| 62 | 52 | | 51 | 0 | |
Утверждение: |
Итоговое значение числа вычисляется по формуле: . |
[править]Свойства чисел с плавающей точкой
-
В нормализованном виде любое отличное от нуля число представимо в единственном виде. Недостатком такой записи является тот факт, что невозможно представить число 0. -
Так как старший бит двоичного числа, записанного в нормализованной форме, всегда равен 1, его можно опустить. Это используется в стандарте IEEE 754. -
В отличие от целочисленных стандартов (например, integer), имеющих равномерное распределение на всем множестве значений, числа с плавающей точкой (double, например) имеют квазиравномерное распределение. -
Вследствие свойства 3, числа с плавающей точкой имеют постоянную относительную погрешность (в отличие от целочисленных, которые имеют постоянную абсолютную погрешность). -
Очевидно, не все действительные числа возможно представить в виде числа с плавающей точкой. -
Точно в таком формате представимы только числа, являющиеся суммой некоторых обратных степеней двойки (не ниже -53). Остальные числа попадают в некоторый диапазон и округляются до ближайшей его границы. Таким образом, абсолютная погрешность составляет половину величины младшего бита. -
В формате double представимы числа в диапазоне .
[править]Особые значения чисел с плавающей точкой
[править]Ноль (со знаком)
В нормализованной форме невозможно представить ноль. Для его представления в стандарте зарезервированы специальные значения мантиссы и экспоненты.
Знак | | |||||||||||||||||
| Экспонента | Мантисса | | |||||||||||||||
0/1 | 0 | 0 | 0 | 0 | 0 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | = |
Согласно стандарту выполняются следующие свойства:
-
-
(если ) -
-
-
-
-
-
-
(если )
[править]Бесконечность (со знаком)
Для приближения ответа к правильному при переполнении, в double можно записать бесконечное значение. Так же, как и в случае с нолем, для этого используются специальные значение мантиссы и экспоненты.
Знак | | |||||||||||||||||
| Экспонента | Мантисса | | |||||||||||||||
0/1 | 1 | 1 | 1 | 1 | 1 | 1, | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | = |
Бесконечное значение можно получить при переполнении или при делении ненулевого числа на ноль.
[править]Неопределенность
В математике встречается понятие неопределенности. В стандарте double предусмотрено псевдочисло, которое арифметическая операция может вернуть даже в случае ошибки.
Знак | | |||||||||||||||||
| Экспонента | Мантисса | | |||||||||||||||
0/1 | 1 | 1 | 1 | 1 | 1 | 1, | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | = |
Неопределенность можно получить в нескольких случаях. Приведем некоторые из них:
-
, где - любая арифметическая операция -
-
-
-
, где