Jump to content

Формат с плавающей запятой четырехкратной точности

(Перенаправлено с Дабл-дабл (арифметика) )

В вычислениях , который занимает 16 байт (128 бит) с точностью , четырехкратная точность (или четырехкратная точность ) — это двоичный плавающей запятой с компьютерный формат чисел по крайней мере, вдвое превышающей 53-битную двойную точность .

Эта 128-битная учетверенная точность предназначена не только для приложений, требующих результатов с точностью выше двойной. [1] но также, в качестве основной функции, обеспечить более надежное и точное вычисление результатов двойной точности за счет минимизации ошибок переполнения и округления в промежуточных вычислениях и чистых переменных. Уильям Кахан , главный архитектор первоначального стандарта чисел с плавающей запятой IEEE 754, отметил: «На данный момент 10-байтовый расширенный формат является приемлемым компромиссом между ценностью сверхточной арифметики и ценой ее реализации для обеспечения быстрой работы; очень скоро два больше байтов точности станет терпимым, и, в конечном итоге, 16-байтовый формат... Подобная постепенная эволюция в сторону большей точности уже рассматривалась, когда был разработан стандарт IEEE 754 для арифметики с плавающей запятой ». [2]

В IEEE 754-2008 -битный формат по основанию 2 официально называетсяbinary128 128 .

Двоичный формат с плавающей запятой четырехкратной точности IEEE 754:binary128

[ редактировать ]

Стандарт IEEE 754 определяет двоичный файл 128 как имеющий:

Это дает точность от 33 до 36 значащих десятичных цифр. Если десятичная строка, содержащая не более 33 значащих цифр, преобразуется в формат четверной точности IEEE 754, давая нормальное число, а затем преобразуется обратно в десятичную строку с тем же количеством цифр, конечный результат должен соответствовать исходной строке. Если число IEEE 754 с четырехкратной точностью преобразуется в десятичную строку, содержащую не менее 36 значащих цифр, а затем преобразуется обратно в представление с четырехкратной точностью, конечный результат должен соответствовать исходному числу. [3]

Формат записывается с неявным ведущим битом со значением 1, если экспонента не хранится со всеми нулями. Таким образом, в формате памяти появляется только 112 бит мантиссы , но общая точность составляет 113 бит (приблизительно 34 десятичных цифры: log 10 (2 113 ) ≈ 34,016 ). Биты располагаются следующим образом:

Знаковый бит, 15-битная экспонента и 112-битная мантисса.

Экспоненциальное кодирование

[ редактировать ]

Двоичная экспонента с плавающей запятой четырехкратной точности кодируется с использованием двоичного представления смещения , при этом нулевое смещение равно 16383; это также известно как смещение экспоненты в стандарте IEEE 754.

Таким образом, как определено двоичным представлением смещения, чтобы получить истинный показатель степени, смещение 16383 необходимо вычесть из сохраненного показателя степени.

Сохраненные показатели степени 0000 16 и 7FFF 16 интерпретируются особым образом.

Экспонента Значимый ноль Значимое и ненулевое Уравнение
0000 16 0 , −0 субнормальные числа (−1) знаковый бит × 2 −16382 × 0.значащие биты 2
0001 16 , ..., 7FFE 16 нормализованное значение (−1) знаковый бит × 2 биты экспоненты 2 – 16383 × 1.значимые биты 2
7ФФФ 16 ± NaN (тихо, сигнализация)

Минимальное строго положительное (субнормальное) значение составляет 2. −16494 ≈ 10 −4965 и имеет точность всего один бит.Минимальное положительное нормальное значение равно 2. −16382 3.3621 × 10 −4932 и имеет точность 113 бит, т.е. ±2 −16494 также. Максимальное представимое значение равно 2. 16384 − 2 16271 1.1897 × 10 4932 .

Примеры четырехкратной точности

[ редактировать ]

Эти примеры даны в битовом представлении , в шестнадцатеричном ,значения с плавающей запятой. Сюда входят знак, (смещенный) показатель и мантисса.

0000 0000 0000 0000 0000 0000 0000 0001 16  = 2 −16382  × 2 −112  = 2 −16494                                           ≈ 6.4751751194380251109244389582276465525 × 10 −4966                                             (наименьшее положительное субнормальное число) 
0000 ffff ffff ffff ffff ffff ffff ffff  16  = 2 −16382  × (1 − 2 −112 )                                          ≈ 3.3621031431120935062626778173217519551 × 10 −4932                                             (самое большое субнормальное число) 
0001 0000 0000 0000 0000 0000 0000 0000 16  = 2 −16382                                           ≈ 3.3621031431120935062626778173217526026 × 10 −4932                                             (наименьшее положительное нормальное число) 
7ffe ffff ffff ffff ffff ffff ffff ffff  16  = 2 16383  × (2 − 2 −112 )                                          ≈ 1.1897314953572317650857593266280070162 × 10 4932                                             (самое большое нормальное число) 
3ffe ffff ffff ffff ffff ffff ffff ffff  16  = 1 - 2 −113                                           ≈ 0,999999999999999999999999999999999999037                                            (наибольшее число меньше единицы) 
3fff 0000 0000 0000 0000 0000 0000 0000  16  = 1 (один) 
3fff 0000 0000 0000 0000 0000 0000 0001  16  = 1 + 2 −112                                           ≈ 1.0000000000000000000000000000000001926                                            (наименьшее число больше единицы) 
c000 0000 0000 0000 0000 0000 0000 0000  16  = −2 
0000 0000 0000 0000 0000 0000 0000 0000 16  = 08000 0000 0000 0000 0000 0000 0000 0000 16  = −0 
7fff 0000 0000 0000 0000 0000 0000 0000  16  = бесконечностьffff 0000 0000 0000 0000 0000 0000 0000  16  = −бесконечность 
4000 921f b544 42d1 8469 898c c517 01b8  16  ≈ π 
3ffd 5555 5555 5555 5555 5555 5555 5555  16  ≈ 1/3 

По умолчанию 1/3 округляется вниз, как с двойной точностью , из-за нечетного числа битов в мантиссе.Таким образом, биты за точкой округления равны 0101... что составляет менее 1/2 единицы на последнем месте .

Дабл-дабл арифметика

[ редактировать ]

Распространенный программный метод реализации почти четырехкратной точности с использованием пар значений двойной точности иногда называют двойной арифметикой . [4] [5] [6] Используя пары значений двойной точности IEEE с 53-битными мантиссами, арифметика дабл-дабл обеспечивает операции с числами со мантиссами не менее [4] 2×53 = 106 бит (фактически 107 бит [7] за исключением некоторых самых больших значений из-за ограниченного диапазона экспоненты), лишь немного менее точно, чем 113-битная мантисса двоичной четверной точности IEEE128. Диапазон дабл-дабл остается по существу таким же, как и в формате двойной точности, поскольку экспонента по-прежнему имеет 11 бит. [4] значительно ниже, чем 15-битный показатель четверной точности IEEE (диапазон 1,8 × 10 308 для дабл-дабла против 1,2×10 4932 для двоичного файла128).

В частности, значение q двойной-двойной/четверной точности в методе double-double неявно представляется как сумма q = x + y двух значений двойной точности x и y , каждое из которых дает половину . мантиссы q . [5] То есть пара ( x , y ) сохраняется вместо q , а операции над q значениями (+, −, ×,...) преобразуются в эквивалентные (но более сложные) операции над значениями x и y . Таким образом, арифметика в этом методе сводится к последовательности операций двойной точности; поскольку арифметика двойной точности обычно реализуется аппаратно, арифметика двойной точности обычно выполняется значительно быстрее, чем более общие арифметические методы произвольной точности . [4] [5]

Обратите внимание, что арифметика дабл-дабл имеет следующие особенности: [8]

  • По мере уменьшения величины значения степень дополнительной точности также уменьшается. Следовательно, наименьшее число в нормализованном диапазоне уже, чем двойная точность. Наименьшее число с полной точностью — 1000...0 2 (106 нулей) × 2. −1074 , или 1.000...0 2 (106 нулей) × 2 −968 . Числа, величина которых меньше 2 −1021 не будет иметь дополнительной точности по сравнению с двойной точностью.
  • Фактическое количество бит точности может варьироваться. В общем случае величина младшей части числа не превышает половины ULP старшей части. Если младшая часть меньше половины ULP старшей части, между значащими числами старшего и младшего порядка подразумеваются значащие биты (либо все 0, либо все 1). Некоторые алгоритмы, которые полагаются на фиксированное количество битов в мантиссе, могут дать сбой при использовании 128-битных двойных чисел.
  • По причине, указанной выше, можно представлять значения как 1 + 2. −1074 , которое является наименьшим представимым числом, большим 1.

В дополнение к арифметике дабл-дабл также возможно генерировать арифметику трипл-дабл или четверной дабл, если требуется более высокая точность без какой-либо библиотеки с плавающей запятой более высокой точности. Они представлены как сумма трех (или четырех) значений двойной точности соответственно. Они могут представлять операции как минимум со 159/161 и 212/215 битами соответственно.

Подобный метод можно использовать для создания арифметики двойного квадрата , которая представляется как сумма двух значений четырехкратной точности. Они могут представлять операции длиной не менее 226 (или 227) бит. [9]

Реализации

[ редактировать ]

Четверная точность часто реализуется в программном обеспечении с помощью различных методов (например, описанного выше метода дабл-дабл, хотя этот метод не реализует четверную точность IEEE), поскольку по состоянию на 2016 год прямая аппаратная поддержка четверной точности , реже (см. « Аппаратная поддержка » ниже). Можно использовать общие арифметические библиотеки произвольной точности для получения четырехкратной (или более высокой) точности, но специализированные реализации четырехкратной точности могут обеспечить более высокую производительность.

Компьютерная поддержка

[ редактировать ]

Отдельный вопрос — в какой степени типы четырёхкратной точности непосредственно включены в языки компьютерного программирования .

точность определяется в Фортране Четверная real(real128) (модуль iso_fortran_env из Фортрана 2008, константа real128 равно 16 на большинстве процессоров), или как real(selected_real_kind(33, 4931)), или нестандартным способом, как REAL*16. (Четырехкратная точность REAL*16 поддерживается компилятором Intel Fortran [10] и GNU Fortran компилятор [11] на архитектурах x86 , x86-64 и Itanium например, .)

Для языка программирования C стандарт ISO/IEC TS 18661-3 (расширения с плавающей запятой для C, взаимообменные и расширенные типы) определяет _Float128 как тип, реализующий формат четырехкратной точности IEEE 754 (binary128). [12] Альтернативно, в C / C++ с несколькими системами и компиляторами четырехкратная точность может быть указана с помощью типа long double , но это не требуется языком (который требует только long double быть по крайней мере столь же точным, как double), и это не распространено.

На x86 и x86-64 наиболее распространенные компиляторы C/C++ реализуют long double либо как 80-битная расширенная точность (например, GNU C Compiler gcc [13] и компилятор Intel C++ с /Qlong‑double выключатель [14] ) или просто как синоним двойной точности (например, Microsoft Visual C++ [15] ), а не с четырехкратной точностью. Стандарт вызова процедур для 64-битной архитектуры ARM (AArch64) определяет, что long double соответствует формату четверной точности IEEE 754. [16] В некоторых других архитектурах некоторые компиляторы C/C++ реализуют long double как четверная точность, например, gcc на PowerPC (как дабл-дабл). [17] [18] [19] ) и СПАРК , [20] или компиляторы Sun Studio на SPARC. [21] Даже если long double не является четырехкратной точностью, однако некоторые компиляторы C/C++ предоставляют нестандартный тип четырехкратной точности в качестве расширения. Например, gcc предоставляет тип четырехкратной точности, называемый __float128 x86, x86-64 и Itanium , для процессоров [22] а на PowerPC как IEEE 128-битный формат с плавающей запятой с использованием опций -mfloat128-hardware или -mfloat128; [23] а некоторые версии компилятора Intel C/C++ для x86 и x86-64 предоставляют нестандартный тип четырехкратной точности, называемый _Quad. [24]

Zig обеспечивает его поддержку с помощью своего f128 тип. [25]

В разрабатываемом языке Google Carbon предусмотрена его поддержка с типом под названием «f128». [26]

По состоянию на 2024 год Rust работает над добавлением нового f128 тип для 128-битных чисел с плавающей запятой четырехкратной точности IEEE. [27]

Библиотеки и наборы инструментов

[ редактировать ]
  • libquadmath Математическая библиотека четырехкратной точности GCC, , предоставляет __float128 и __complex128 операции.
  • Boost.Multiprecision Библиотека многоточности Boost предоставляет унифицированный кроссплатформенный интерфейс C++ для __float128 и _Quad типы и включает специальную реализацию стандартной математической библиотеки. [28]
  • Multiprecision Computing Toolbox для MATLAB позволяет выполнять вычисления с четырехкратной точностью в MATLAB . Он включает в себя базовые арифметические функции, а также численные методы, плотную и разреженную линейную алгебру. [29]
  • Двойные поплавки [30] Пакет обеспечивает поддержку вычислений дабл-дабл для языка программирования Julia.
  • Даблдабл.py [31] библиотека позволяет выполнять дабл-дабл вычисления в Python. [ нужна ссылка ]
  • Mathematica поддерживает числа IEEE четверной точности: 128-битные значения с плавающей запятой (Real128) и 256-битные комплексные значения (Complex256). [ нужна ссылка ]

Аппаратная поддержка

[ редактировать ]

Четверная точность IEEE была добавлена ​​в IBM System/390 G5 в 1998 году. [32] и поддерживается аппаратно в последующих процессорах z/Architecture . [33] [34] ЦП IBM POWER9 ( Power ISA 3.0 ) имеет встроенную 128-битную аппаратную поддержку. [23]

Встроенная поддержка 128-битных чисел с плавающей запятой IEEE определена в PA-RISC 1.0. [35] и в SPARC V8 [36] и V9 [37] архитектуры (например, имеется 16 регистров четырехточности %q0, %q4, ...), но ни один процессор SPARC не реализует операции четырехточности на аппаратном уровне по состоянию на 2004 г. . [38]

Расширенная точность, отличная от IEEE (128 бит памяти, 1 знаковый бит, 7 битов экспоненты, 112 дробных битов, 8 неиспользуемых битов) была добавлена ​​в серию IBM System/370 (1970–1980-е годы) и была доступна на некоторых System/360. модели 1960-х годов (System/360-85, [39] -195 и другие по специальному заказу или смоделированы программным обеспечением ОС).

Мэйнфреймы Siemens серий 7.700 и 7.500 и их преемники поддерживают те же форматы и инструкции с плавающей запятой, что и IBM System/360 и System/370.

Процессор VAX реализовал плавающую запятую четырехкратной точности, не соответствующую стандарту IEEE, в формате «H с плавающей запятой». Он имел один знаковый бит, 15-битную экспоненту и 112 дробных битов, однако расположение в памяти значительно отличалось от четверной точности IEEE, а также отличалось смещение экспоненты. Лишь некоторые из самых ранних процессоров VAX реализовали инструкции H с плавающей запятой аппаратно, все остальные эмулировали H с плавающей запятой программно.

Архитектура NEC Vector Engine поддерживает сложение, вычитание, умножение и сравнение 128-битных двоичных чисел четверной точности IEEE 754. [40] Используются два соседних 64-битных регистра. В векторном регистре не поддерживается арифметика четырехкратной точности. [41]

Архитектура RISC-V определяет расширение «Q» (четверенной точности) для 128-битной двоичной арифметики с плавающей запятой IEEE 754-2008. [42] Расширение «L» (еще не сертифицированное) будет определять 64-битные и 128-битные десятичные числа с плавающей запятой. [43]

Аппаратную реализацию четырехкратной точности (128-бит) не следует путать со «128-битными FPU», реализующими инструкции SIMD , такими как Streaming SIMD Extensions или AltiVec , которые относятся к 128-битным векторам из четырех 32-битных одинарной точности или два 64-битных значения двойной точности, которые обрабатываются одновременно.

См. также

[ редактировать ]
  1. ^ Дэвид Х. Бэйли; Джонатан М. Борвейн (6 июля 2009 г.). «Высокоточные вычисления и математическая физика» (PDF) .
  2. ^ Хайэм, Николас (2002). «Проектирование стабильных алгоритмов» в журнале «Точность и устойчивость численных алгоритмов» (2-е изд.) . СИАМ. п. 43.
  3. ^ Уильям Кахан (1 октября 1987 г.). «Конспекты лекций о статусе стандарта IEEE 754 для двоичной арифметики с плавающей запятой» (PDF) .
  4. ^ Jump up to: а б с д Йозо Хида, К. Ли и Д. Х. Бэйли, Арифметика Quad-Double: алгоритмы, реализация и применение , Технический отчет Национальной лаборатории Лоуренса Беркли LBNL-46996 (2000). Также Ю. Хида и др., Библиотека для арифметики дабл-дабл и четверной дабл (2007).
  5. ^ Jump up to: а б с Дж. Р. Шевчук, Адаптивная точная арифметика с плавающей запятой и быстрые устойчивые геометрические предикаты , Дискретная и вычислительная геометрия 18: 305–363, 1997.
  6. ^ Кнут, Д.Э. Искусство компьютерного программирования (2-е изд.). глава 4.2.3. проблема 9.
  7. ^ Роберт Мунафо Высокоточные типы данных с плавающей запятой F107 и F161 (2011).
  8. ^ 128-битный длинный тип данных с двойной плавающей запятой
  9. ^ sourceware.org Re: Состояние glibc libm
  10. ^ «Краткое описание продукта компилятора Intel Fortran (архивная копия на web.archive.org)» (PDF) . Су. Архивировано из оригинала 25 октября 2008 года . Проверено 23 января 2010 г. {{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  11. ^ «Серия выпусков GCC 4.6 — изменения, новые функции и исправления» . Проверено 6 февраля 2010 г.
  12. ^ «ИСО/МЭК TS 18661-3» (PDF) . 10.06.2015 . Проверено 22 сентября 2019 г.
  13. ^ Параметры i386 и x86-64 (архивная копия на web.archive.org) , Использование коллекции компиляторов GNU .
  14. ^ Сайт разработчика Intel
  15. ^ Домашняя страница MSDN, о компиляторе Visual C++.
  16. ^ «Стандарт вызова процедур для 64-битной архитектуры ARM (AArch64)» (PDF) . 22 мая 2013 г. Архивировано из оригинала (PDF) 16 октября 2019 г. Проверено 22 сентября 2019 г.
  17. ^ Опции RS/6000 и PowerPC , Использование коллекции компиляторов GNU .
  18. ^ Внутри Macintosh — числовые данные PowerPC. Архивировано 9 октября 2012 г., в Wayback Machine.
  19. ^ 128-битные длинные процедуры двойной поддержки для Дарвина
  20. ^ Параметры SPARC , Использование коллекции компиляторов GNU .
  21. ^ Математические библиотеки Sun Studio 11 , Руководство по численным вычислениям (2005).
  22. ^ Дополнительные плавающие типы , использование коллекции компилятора GNU.
  23. ^ Jump up to: а б «Серия выпусков GCC 6 — изменения, новые функции и исправления» . Проверено 13 сентября 2016 г.
  24. ^ Форумы Intel C++ (2007).
  25. ^ «Плывет» . ziglan.org . Проверено 7 января 2024 г.
  26. ^ «Основной репозиторий Carbon Language — Языковой дизайн» . Гитхаб . 09.08.2022 . Проверено 22 сентября 2022 г.
  27. ^ Кросс, Трэвис. «Проблема отслеживания для типов с плавающей запятой f16 и f128» . Гитхаб . Проверено 5 июля 2024 г.
  28. ^ «Boost.Multiprecision — float128» . Проверено 22 июня 2015 г.
  29. ^ Павел Голобородько (20 января 2013 г.). «Быстрые вычисления четырехкратной точности в MATLAB» . Проверено 22 июня 2015 г.
  30. ^ "DoubleFloats.jl" . Гитхаб .
  31. ^ "даблдабл.py" . Гитхаб .
  32. ^ Шварц, Э.М.; Крыговский, Калифорния (сентябрь 1999 г.). «Блок вычислений с плавающей запятой S / 390 G5». Журнал исследований и разработок IBM . 43 (5/6): 707–721. CiteSeerX   10.1.1.117.6711 . дои : 10.1147/рд.435.0707 .
  33. ^ Гервиг Г. и Веттер Х. и Шварц Э.М. и Хесс Дж. и Крыговский К.А. и Фляйшер Б.М. и Кронер М. (май 2004 г.). «Модуль вычислений с плавающей запятой IBM eServer z990. IBM J. Res. Dev. 48; стр. 311-322». {{cite news}}: CS1 maint: несколько имен: список авторов ( ссылка )
  34. ^ Эрик Шварц (22 июня 2015 г.). «Ускорители SIMD IBM z13 для целых, строк и чисел с плавающей запятой» (PDF) . Проверено 13 июля 2015 г.
  35. ^ «Поддержка разработчиком форматов двоичного обмена» . ИИЭЭ . Архивировано из оригинала 27 октября 2017 г. Проверено 15 июля 2021 г.
  36. ^ Руководство по архитектуре SPARC: версия 8 (архивная копия на web.archive.org) (PDF) . SPARC International, Inc., 1992. Архивировано из оригинала (PDF) 4 февраля 2005 г. Проверено 24 сентября 2011 г. SPARC — это архитектура набора команд (ISA) с 32-битным целым числом и 32-, 64- и 128-битным числом с плавающей запятой стандарта IEEE 754 в качестве основных типов данных.
  37. ^ Дэвид Л. Уивер; Том Джермонд, ред. (1994). Руководство по архитектуре SPARC: версия 9 (архивная копия на web.archive.org) (PDF) . SPARC International, Inc. Архивировано из оригинала (PDF) 18 января 2012 г. Проверено 24 сентября 2011 г. Плавающая запятая: архитектура предоставляет набор команд с плавающей запятой, совместимый со стандартом IEEE 754, работающий с отдельным файлом регистров, который обеспечивает 32 команды одинарной точности (32 бита), 32 команды двойной точности (64 бита), 16 команд четырехкратной точности. (128-битные) регистры или их смесь.
  38. ^ «Поведение и реализация SPARC» . Руководство по численным вычислениям — Sun Studio 10 . Сан Микросистемс, Инк. 2004 г. Проверено 24 сентября 2011 г. Однако есть четыре ситуации, когда аппаратное обеспечение не сможет успешно выполнить инструкцию с плавающей запятой: ... Инструкция не реализуется аппаратным обеспечением (например, ... инструкции четырехкратной точности на любом SPARC FPU).
  39. ^ Падегс А (1968). «Структурные аспекты System/360 Model 85, III: Расширения архитектуры с плавающей запятой». IBM Systems Journal . 7 : 22–29. дои : 10.1147/sj.71.0022 .
  40. ^ Справочное руководство по языку ассемблера Vector Engine , глава 4. Синтаксис ассемблера, стр. 23.
  41. ^ Руководство по архитектуре SX-Aurora TSUBASA, версия 1.1 (стр. 38, 60).
  42. ^ Спецификация RISC-V ISA, версия 20191213 , Глава 13, Стандартное расширение «Q» для чисел с плавающей запятой четырехточности, стр. 79.
  43. ^ [1] Глава 15 (с. 95).
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 946dad4d14c44c8650bf2dd97608ed79__1722390240
URL1:https://arc.ask3.ru/arc/aa/94/79/946dad4d14c44c8650bf2dd97608ed79.html
Заголовок, (Title) документа по адресу, URL1:
Quadruple-precision floating-point format - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)