Плавающая точка в .NET - часть 1: принципы и форматы - Числа с двойной и повышенной точностью

ОГЛАВЛЕНИЕ


Числа с двойной и повышенной точностью

Числа двойной точности с плавающей запятой хранятся в практически аналогичном виде, как и числа с одинарной точностью. Некоторые константы все же отличаются. Знак также занимает 1 бит - и это не удивительно. Смещенная экспонента занимает 11 бит, со смещенным значением 1023. Мантисса занимает 52 бита при этом 53-ий бит не явно установлен в 1 для нормализованных чисел.

Стандарт IEC 60559 не определяет конкретные значения для параметров расширенного формата с плавающей запятой - он только указывает минимальные значения. Расширенный формат использовался в процессорах Intel поскольку 8087 занимает 80 бит, при этом 15 бит идут на экспоненту и 64 бита на значащую цифру. В отличие от других форматов, расширенный формат не оставляет места для ведущего бита значащей цифры, что позволяет определенную оптимизацию процессоров и сохранения ценного места на чипе.

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

Формат Одинарная Двойная Повышенная
Длинна (биты) 32 64 80
Биты экспоненты 8 11 15
Exponent bias 127 1023 16383
Наименьшая экспонента -126 -1022 -16382
Наибольшая экспонента +127 +1023 +16383
Точность 24 53 64
Наименьшее положительное значение 1.4012985e-45 2.4703282292062327e-324 1.82259976594123730126e-4951
Наименьшее положительное нормализованное значение 1.1754944e-38 2.2250738585072010e-308 3.36210314311209350626e-4932
Наибольшее положительное значение 3.4028235e+38 1.7976931348623157e+308 1.18973149535723176502e+4932

Относительно десятичного формата

Десятичный тип (Decimal) в структуре .NET является нестандартным типом с плавающей запятой с основанием 10, при этом он занимает 128 бит. 96 из них используются для мантиссы. 1 бит используется для знака, а 5 бит для экспоненты, что может варьироваться от 0 до 28. Формат не следует какому-либо существующему или спланированному стандарту. Также не существует никаких бесконечностей и не чисел (NaN).

Любое десятичное число, которое не превышает 28 цифр до и после десятичной точки может быть представлено точно. Это отлично подходит для финансовых операций, но это также имеет свою цену - подсчет десятичных на порядок больше медленнее, чем типы с плавающей запятой. Десятичные точки как минимум занимают в два раза больше памяти.