Плавающая точка в .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 цифр до и после десятичной точки может быть представлено точно. Это отлично подходит для финансовых операций, но это также имеет свою цену - подсчет десятичных на порядок больше медленнее, чем типы с плавающей запятой. Десятичные точки как минимум занимают в два раза больше памяти.