Число четверной точности

Число́ четверно́й то́чности (англ. Quadruple precision) — компьютерный формат представления чисел с плавающей запятой, занимающий в памяти четыре последовательных ячейки (компьютерных слова; в случае 32-битного компьютера — 128 бит или 16 байт). Как правило, обозначает формат числа с плавающей запятой binary128 стандарта IEEE 754.

Формат числа четверной точности

Знак: 1 бит.
Порядок: 15 бит[1][2].
Мантисса: 112 бит (112[1][2] явно хранятся).

Эквивалентное количество значащих десятичных цифр (при одинаковой средней относительной погрешности представления): 34 (log10(2113) ≈ 34.016).

Знак
(15 бит)
Порядок
(112 бит)
Мантисса
127 120 119 112 111 104 103 96 95 88 87 80 79 72 71 64 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0

Примеры чисел четверной точности

Небольшие константы:[2]

0x 3fff 0000 0000 0000 0000 0000 0000 0000  = 1
0x c000 0000 0000 0000 0000 0000 0000 0000  = −2

Максимальное и минимальное (нормальное) число четверной точности:[3][4][2]

0x 7ffe ffff ffff ffff ffff ffff ffff ffff  ≈  1.18973149535723176508575932662800702 × 104932 
0x 0001 0000 0000 0000 0000 0000 0000 0000 ≈ 3.36210314311209350626267781732175260 * 10 -4932 

Денормализованные числа четверной точности: максимальное и минимальное положительное:[2]

0x 0000 ffff ffff ffff ffff ffff ffff ffff	≈ 3.3621031431120935062626778173217520 * 10 ^-4932
0x 0000 0000 0000 0000 0000 0000 0000 0001	≈ 6.4751751194380251109244389582276466 * 10 ^-4966

Нули четверной точности:[2]

0x 0000 0000 0000 0000 0000 0000 0000 0000  = 0
0x 8000 0000 0000 0000 0000 0000 0000 0000  = −0

Бесконечности четверной точности:[2]

0x 7fff 0000 0000 0000 0000 0000 0000 0000  = ∞
0x ffff 0000 0000 0000 0000 0000 0000 0000  = −∞
0x 3ffd 5555 5555 5555 5555 5555 5555 5555  ≈  1/3

Поддержка

Ряд компиляторов, в том числе GCC (с версии 4.0, 2010[5]), IBM XL (10.1[5]), Intel, позволяет использовать числа точности "Quadruple" в программах на языках C/C++ и Fortran (например как тип __float128[6], long double, REAL*16), реализуя вычисления над ними программно, на 1-2 порядка более медленно, чем с точностью, поддерживаемой аппаратно[7]. Несмотря на то, что подобные вычисления можно реализовать в системах обработки чисел произвольной точности (например, GMP), существует несколько специализированных библиотек с программной реализацией "Quadruple" точности[8][9][10]. Также разрабатываются способы аппаратной реализации[11][12], но по состоянию на 2005 год в массовых процессорах четверная точность аппаратно не реализовывалась[13].

Для некоторых методов решения четверная точность позволяет ускорить сходимость (количество итераций метода) по сравнению с двойной точностью, при этом каждая итерация становится более долгой из-за использования программной реализации операций над числами[14].

Существует подход "double-double" к реализации чисел с точностью, приближенной к четверной, но использующих более короткий формат экспоненты (иногда реализуется в компиляторах Fortran для типа REAL*16). При таком подходе, например, для сложения двух чисел типа "double-double" требуется 8 операций сложения и вычитания и одно сравнение над числами двойной точности[13].

См. также

Примечания

  1. 1 2 Real, Double, and Quadruple Precision (FORTRAN 77 Language Reference). Дата обращения: 30 ноября 2016. Архивировано 6 апреля 2012 года.
  2. 1 2 3 4 5 6 7 IEEE Arithmetic. Дата обращения: 30 ноября 2016. Архивировано 19 июня 2020 года.
  3. https://github.com/gcc-mirror/gcc/blob/03cb8c1ee6db41ed646eb37f164ba972abc6a87a/libquadmath/quadmath.h#L145 FLT128_MAX
  4. https://github.com/gcc-mirror/gcc/blob/03cb8c1ee6db41ed646eb37f164ba972abc6a87a/libquadmath/quadmath.h#L146 FLT128_MIN
  5. 1 2 IBM Use GCC's long double representation for 128-bit quad precision floating point values - United States. Дата обращения: 30 ноября 2016. Архивировано 30 ноября 2016 года.
  6. Floating Types - Using the GNU Compiler Collection (GCC). Дата обращения: 30 ноября 2016. Архивировано 30 ноября 2016 года.
  7. Источник. Дата обращения: 30 ноября 2016. Архивировано 28 ноября 2016 года.
  8. Exploring quadruple precision floating point numbers in GCC and ICC - Peter Larsson
  9. Архивированная копия. Дата обращения: 30 ноября 2016. Архивировано из оригинала 30 ноября 2016 года.
  10. Berkeley SoftFloat. Дата обращения: 30 ноября 2016. Архивировано 17 ноября 2016 года.
  11. Архивированная копия. Дата обращения: 30 ноября 2016. Архивировано из оригинала 20 августа 2016 года.
  12. Источник. Дата обращения: 30 ноября 2016. Архивировано 6 июля 2017 года.
  13. 1 2 Источник. Дата обращения: 30 ноября 2016. Архивировано 9 июля 2020 года.
  14. Источник. Дата обращения: 30 ноября 2016. Архивировано 29 августа 2017 года.