Представление чисел с плавающей точкой — различия между версиями
(→Ссылки) |
|||
Строка 14: | Строка 14: | ||
# мантисса (52) | # мантисса (52) | ||
В качестве базы (основания степени) используется число 2. | В качестве базы (основания степени) используется число 2. | ||
− | { | + | |
+ | {|class="wikitable" style="border-collapse: collapse; border: none" | ||
+ | |- | ||
+ | !colspan=7 style="background-color: powderblue; border: thin solid black; border-bottom: none"|Знак | ||
+ | |- | ||
+ | !style="background-color: powderblue; border: thin solid black; border-top: none"| | ||
+ | !colspan=11 style="background-color: lightgreen; border: thin solid black"|Порядок<br />(11 бит) | ||
+ | !colspan=53 style="background-color: lightcoral; border: thin solid black"|Мантисса<br />(52+1 бит) | ||
+ | |-style="text-align: right" | ||
+ | !style="background-color: powderblue; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="background-color: lightgreen; border: thin solid black"|0 | ||
+ | !style="border: none"|1, | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | !style="background-color: lightcoral; border: thin solid black"|0 | ||
+ | |- | ||
+ | |style="border: none"| | ||
+ | |colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|62 | ||
+ | |colspan=7 style="border: none; border-right: 1px solid gray; text-align: right"|52 | ||
+ | |style="border: none"| | ||
+ | |colspan=48 style="border: none; border-left: 1px solid gray; text-align: left"|51 | ||
+ | |colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|0 | ||
+ | |} | ||
{{Определение | {{Определение |
Версия 06:54, 20 октября 2011
Содержание
Плавающая точка
Определение: |
Плавающая точка (floating point) - метод представления действительных чисел, при котором число хранится в виде мантиссы и показателя степени. |
Представление чисел с плавающей точкой рассмотрим на примере чисел двойной точности (double precision). Такие числа занимают в памяти два машинных слова (8 байт на 32-битных системах). Наиболее распространенное представление описано в стандарте IEEE 754.
Числа двойной точности
Число с плавающей точкой хранится в нормализованной форме и состоит из трех частей (в скобках указано количество бит, отводимых на каждую секцию в формате double):
- знак (1)
- экспонента (показатель степени) (11)
- мантисса (52)
В качестве базы (основания степени) используется число 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, например) имеют квазиравномерное распределение.
TODO: Вставить картинки, когда можно будет загрузить файл
- В следствие свойства 3, числа с плавающей точкой имеют постоянную относительную погрешность (в отличие от целочисленных, которые имеют постоянную абсолютную погрешность).
- Очевидно, не все действительные числа возможно представить в виде числа с плавающей точкой.
- Точно в таком формате представимы только числа, являющиеся суммой некоторых обратных степеней двойки (не ниже -53). Остальные числа попадают в некоторый диапазон и округляются до ближайшей его границы. Таким образом, абсолютная погрешность составляет половину величины младшего бита.
Машинная эпсилон
Определение: |
Машинная эпсилон - наименьшее положительное число | , такое что, , где - машинное сложение.
Утверждение: |
Таким образом, компьютер не различает числа и , если . |
Утверждение: |
Из свойств чисел двойной точности следует, что для них . |
Погрешность предиката "левый поворот"
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 Предикат "левый поворот"