Представление чисел с плавающей точкой — различия между версиями
Строка 5: | Строка 5: | ||
'''Плавающая точка (floating point)''' - метод представления действительных чисел, при котором число хранится в виде мантиссы и показателя степени. | '''Плавающая точка (floating point)''' - метод представления действительных чисел, при котором число хранится в виде мантиссы и показателя степени. | ||
}} | }} | ||
+ | Такой метод является компромиссом между точностью и диапазоном представляемых значений. | ||
Представление чисел с плавающей точкой рассмотрим на примере чисел ''двойной точности'' (''double precision''). | Представление чисел с плавающей точкой рассмотрим на примере чисел ''двойной точности'' (''double precision''). | ||
Такие числа занимают в памяти два машинных слова (8 байт на 32-битных системах). Наиболее распространенное представление описано в стандарте IEEE 754. | Такие числа занимают в памяти два машинных слова (8 байт на 32-битных системах). Наиболее распространенное представление описано в стандарте IEEE 754. | ||
Строка 10: | Строка 11: | ||
== Числа двойной точности == | == Числа двойной точности == | ||
Число с плавающей точкой хранится в нормализованной форме и состоит из трех частей (в скобках указано количество бит, отводимых на каждую секцию в формате double): | Число с плавающей точкой хранится в нормализованной форме и состоит из трех частей (в скобках указано количество бит, отводимых на каждую секцию в формате double): | ||
− | # знак | + | # знак |
− | # экспонента (показатель степени | + | # экспонента (показатель степени) |
− | # мантисса | + | # мантисса |
В качестве базы (основания степени) используется число 2. | В качестве базы (основания степени) используется число 2. | ||
Строка 96: | Строка 97: | ||
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|0 | |colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|0 | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
{{Утверждение | {{Утверждение | ||
Строка 106: | Строка 102: | ||
Итоговое значение числа вычисляется по формуле: | Итоговое значение числа вычисляется по формуле: | ||
<br><tex> x = (-1)^{sign} \times (1.mant) \times 2^{exp} </tex> | <br><tex> x = (-1)^{sign} \times (1.mant) \times 2^{exp} </tex> | ||
+ | }} | ||
+ | |||
+ | == Нормальная и нормализованная формы == | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | '''Нормальной''' называется форма представления числа, при которой абсолютное значение мантиссы десятичного числа находится на полуинтервале <tex> [0,1) </tex>. | ||
+ | }} | ||
+ | Недостатком такой записи является тот факт, что числа нельзя записать однозначно: <tex> 0.001 = 0.01 \times 10^0 </tex>. | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | '''Нормализованной''' называется форма представления числа, при которой абсолютное значение мантиссы десятичного числа лежит на полуинтервале <tex> [1, 10) </tex>, а двоичного на полуинтервале <tex> [1, 2) </tex>. | ||
}} | }} | ||
Строка 112: | Строка 119: | ||
# Так как старший бит двоичного числа, записанного в нормализованной форме, всегда равен 1, его можно опустить. Это используется в стандарте IEEE 754. | # Так как старший бит двоичного числа, записанного в нормализованной форме, всегда равен 1, его можно опустить. Это используется в стандарте IEEE 754. | ||
# В отличие от целочисленных стандартов (например, integer), имеющих равномерное распределение на всем множестве значений, числа с плавающей точкой (double, например) имеют квазиравномерное распределение. | # В отличие от целочисленных стандартов (например, integer), имеющих равномерное распределение на всем множестве значений, числа с плавающей точкой (double, например) имеют квазиравномерное распределение. | ||
− | |||
# В следствие свойства 3, числа с плавающей точкой имеют постоянную относительную погрешность (в отличие от целочисленных, которые имеют постоянную абсолютную погрешность). | # В следствие свойства 3, числа с плавающей точкой имеют постоянную относительную погрешность (в отличие от целочисленных, которые имеют постоянную абсолютную погрешность). | ||
# Очевидно, не все действительные числа возможно представить в виде числа с плавающей точкой. | # Очевидно, не все действительные числа возможно представить в виде числа с плавающей точкой. | ||
# Точно в таком формате представимы только числа, являющиеся суммой некоторых обратных степеней двойки (не ниже -53). Остальные числа попадают в некоторый диапазон и округляются до ближайшей его границы. Таким образом, абсолютная погрешность составляет половину величины младшего бита. | # Точно в таком формате представимы только числа, являющиеся суммой некоторых обратных степеней двойки (не ниже -53). Остальные числа попадают в некоторый диапазон и округляются до ближайшей его границы. Таким образом, абсолютная погрешность составляет половину величины младшего бита. | ||
+ | # В формате double представимы числа в диапазоне <tex> [1.7 \times 10^-308, 1.7 \times 10^308] </tex>. | ||
== Машинная эпсилон == | == Машинная эпсилон == |
Версия 07:35, 11 ноября 2011
Содержание
Плавающая точка
Определение: |
Плавающая точка (floating point) - метод представления действительных чисел, при котором число хранится в виде мантиссы и показателя степени. |
Такой метод является компромиссом между точностью и диапазоном представляемых значений. Представление чисел с плавающей точкой рассмотрим на примере чисел двойной точности (double precision). Такие числа занимают в памяти два машинных слова (8 байт на 32-битных системах). Наиболее распространенное представление описано в стандарте IEEE 754.
Числа двойной точности
Число с плавающей точкой хранится в нормализованной форме и состоит из трех частей (в скобках указано количество бит, отводимых на каждую секцию в формате double):
- знак
- экспонента (показатель степени)
- мантисса
В качестве базы (основания степени) используется число 2.
Знак | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порядок (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 | 0 | 0 | 0 |
62 | 52 | 51 | 0 |
Утверждение: |
Итоговое значение числа вычисляется по формуле:
|
Нормальная и нормализованная формы
Определение: |
Нормальной называется форма представления числа, при которой абсолютное значение мантиссы десятичного числа находится на полуинтервале | .
Недостатком такой записи является тот факт, что числа нельзя записать однозначно:
.Определение: |
Нормализованной называется форма представления числа, при которой абсолютное значение мантиссы десятичного числа лежит на полуинтервале | , а двоичного на полуинтервале .
Свойства чисел с плавающей точкой
- В нормализованном виде любое отличное от нуля число представимо в единственном виде. Недостатком такой записи является тот факт, что невозможно представить число 0.
- Так как старший бит двоичного числа, записанного в нормализованной форме, всегда равен 1, его можно опустить. Это используется в стандарте IEEE 754.
- В отличие от целочисленных стандартов (например, integer), имеющих равномерное распределение на всем множестве значений, числа с плавающей точкой (double, например) имеют квазиравномерное распределение.
- В следствие свойства 3, числа с плавающей точкой имеют постоянную относительную погрешность (в отличие от целочисленных, которые имеют постоянную абсолютную погрешность).
- Очевидно, не все действительные числа возможно представить в виде числа с плавающей точкой.
- Точно в таком формате представимы только числа, являющиеся суммой некоторых обратных степеней двойки (не ниже -53). Остальные числа попадают в некоторый диапазон и округляются до ближайшей его границы. Таким образом, абсолютная погрешность составляет половину величины младшего бита.
- В формате double представимы числа в диапазоне .
Машинная эпсилон
Определение: |
Машинная эпсилон - наименьшее положительное число | , такое что, , где - машинное сложение.
Утверждение: |
Таким образом, компьютер не различает числа и , если . |
Утверждение: |
Из свойств чисел двойной точности следует, что для них . |
Погрешность предиката "левый поворот"
TODO: Вывести
Ссылки
en.wikipedia.org Floating point
en.wikipedia.org Double precision floating point format
Goldberg, D. 1991 What every computer scientist should know about floating-point arithmetic
ieee.org IEEE 754
neerc.ifmo.ru/mediawiki Предикат "левый поворот"