Изменения

Перейти к навигации Перейти к поиску
Перенос https://ru.wikipedia.org/w/index.php?title=%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%87%D0%B5%D1%82%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B9_%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8&oldid=135261838
'''Число́ четверно́й то́чности''' ({{lang-en|Quadruple precision}}) —
[[компьютер]]ный формат представления чисел с плавающей запятой, занимающий в памяти четыре последовательных ячейки (компьютерных слова; в случае 32-битного компьютера — 128 [[бит]] или 16 [[байт]]). Как правило, обозначает формат [[числа с плавающей запятой]] '''binary128''' стандарта [[IEEE 754]].

== Формат числа четверной точности ==
Знак: 1 бит.<br />
Порядок: 15 бит<ref name="FORTRAN 77 Language Reference">{{Cite web |url=https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnck/index.html |title=Real, Double, and Quadruple Precision (FORTRAN 77 Language Reference)<!-- Заголовок добавлен ботом --> |access-date=2016-11-30 |archive-date=2012-04-06 |archive-url=https://web.archive.org/web/20120406132602/http://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnck/index.html |url-status=live }}</ref><ref name="ncg_math">{{Cite web |url=http://docs.oracle.com/cd/E19957-01/806-3568/ncg_math.html |title=IEEE Arithmetic<!-- Заголовок добавлен ботом --> |access-date=2016-11-30 |archive-date=2020-06-19 |archive-url=https://web.archive.org/web/20200619223223/https://docs.oracle.com/cd/E19957-01/806-3568/ncg_math.html |url-status=live }}</ref>.<br />
[[Экспоненциальная_запись|Мантисса]]: 112 бит (112<ref name="FORTRAN 77 Language Reference"/><ref name="ncg_math"/> явно хранятся).

Эквивалентное количество значащих десятичных цифр (при одинаковой средней относительной погрешности представления): 34 ({{nowrap|log<sub>10</sub>(2<sup>113</sup>) ≈ 34.016}}).

{|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=15 style="background-color: lightgreen; border: thin solid black"|(15 бит)<br />Порядок
! colspan="112" style="background-color: lightcoral; border: thin solid black" |(112 бит)<br />Мантисса
|-style="text-align: right"
<!-- 128 бит -->
!style="background-color: powderblue; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
<!-- 120 бит -->
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
!style="background-color: lightgreen; border: thin solid black"|
<!-- 112 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 104 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 96 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 88 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 80 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 72 бита -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 64 бита -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 56 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 48 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 40 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 32 бита -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 24 бита -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 16 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
<!-- 8 бит -->
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
!style="background-color: lightcoral; border: thin solid black"|
|-
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|127
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|120
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|119
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|112
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|111
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|104
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|103
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|96
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|95
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|88
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|87
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|80
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|79
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|72
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|71
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|64
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|63
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|56
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|55
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|48
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|47
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|40
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|39
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|32
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|31
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|24
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|23
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|16
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|15
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|8
|colspan=4 style="border: none; border-left: 1px solid gray; text-align: left"|7
|colspan=4 style="border: none; border-right: 1px solid gray; text-align: right"|0
|}

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

Небольшие константы:<ref name="ncg_math"/>

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

Максимальное и минимальное (нормальное) число четверной точности:<ref>https://github.com/gcc-mirror/gcc/blob/03cb8c1ee6db41ed646eb37f164ba972abc6a87a/libquadmath/quadmath.h#L145 FLT128_MAX</ref><ref>https://github.com/gcc-mirror/gcc/blob/03cb8c1ee6db41ed646eb37f164ba972abc6a87a/libquadmath/quadmath.h#L146 FLT128_MIN</ref><ref name="ncg_math"/>
0x 7ffe ffff ffff ffff ffff ffff ffff ffff ≈ 1.18973149535723176508575932662800702 × 10<sup>4932</sup>
0x 0001 0000 0000 0000 0000 0000 0000 0000 ≈ 3.36210314311209350626267781732175260 * 10 <sup>-4932</sup>

[[Денормализованные числа]] четверной точности: максимальное и минимальное положительное:<ref name="ncg_math"/>
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

Нули четверной точности:<ref name="ncg_math"/>
0x 0000 0000 0000 0000 0000 0000 0000 0000 = 0
0x 8000 0000 0000 0000 0000 0000 0000 0000 = −0

Бесконечности четверной точности:<ref name="ncg_math"/>
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<ref name="gcc">{{Cite web |url=http://www-01.ibm.com/support/docview.wss?uid=swg21245006 |title=IBM Use GCC's long double representation for 128-bit quad precision floating point values - United States<!-- Заголовок добавлен ботом --> |access-date=2016-11-30 |archive-date=2016-11-30 |archive-url=https://web.archive.org/web/20161130184521/http://www-01.ibm.com/support/docview.wss?uid=swg21245006 |url-status=live }}</ref>), IBM XL (10.1<ref name="gcc"/>), Intel, позволяет использовать числа точности "Quadruple" в программах на языках C/C++ и Fortran (например как тип __float128<ref>{{Cite web |url=https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Floating-Types.html |title=Floating Types - Using the GNU Compiler Collection (GCC)<!-- Заголовок добавлен ботом --> |access-date=2016-11-30 |archive-date=2016-11-30 |archive-url=https://web.archive.org/web/20161130111245/https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Floating-Types.html |url-status=live }}</ref>, long double, REAL*16), реализуя вычисления над ними программно, на 1-2 порядка более медленно, чем с точностью, поддерживаемой аппаратно<ref>{{Cite web |url=https://gcc.gnu.org/onlinedocs/gcc-6.2.0/libquadmath.pdf |title=Источник |access-date=2016-11-30 |archive-date=2016-11-28 |archive-url=https://web.archive.org/web/20161128160326/https://gcc.gnu.org/onlinedocs/gcc-6.2.0/libquadmath.pdf |url-status=live }}</ref>. Несмотря на то, что подобные вычисления можно реализовать в системах обработки чисел произвольной точности (например, [[GNU Multi-Precision Library|GMP]]), существует несколько специализированных библиотек с программной реализацией "Quadruple" точности<ref>[https://www.nsc.liu.se/~pla/blog/2013/10/17/quadruple-precision/ Exploring quadruple precision floating point numbers in GCC and ICC - Peter Larsson<!-- Заголовок добавлен ботом -->]</ref><ref>{{Cite web |url=http://www.jaist.ac.jp/~s1410018/papers/qd.pdf |title=Архивированная копия |accessdate=2016-11-30 |archiveurl=https://web.archive.org/web/20161130111440/http://www.jaist.ac.jp/~s1410018/papers/qd.pdf |archivedate=2016-11-30 |deadlink=yes }}</ref><ref>{{Cite web |url=http://www.jhauser.us/arithmetic/SoftFloat.html |title=Berkeley SoftFloat<!-- Заголовок добавлен ботом --> |access-date=2016-11-30 |archive-date=2016-11-17 |archive-url=https://web.archive.org/web/20161117084940/http://www.jhauser.us/arithmetic/SoftFloat.html |url-status=live }}</ref>. Также разрабатываются способы аппаратной реализации<ref>{{Cite web |url=https://www.ripublication.com/ijaer16/ijaerv11n2_122.pdf |title=Архивированная копия |accessdate=2016-11-30 |archiveurl=https://web.archive.org/web/20160820191651/http://ripublication.com/ijaer16/ijaerv11n2_122.pdf |archivedate=2016-08-20 |deadlink=yes }}</ref><ref>{{Cite web |url=http://www.atlantis-press.com/php/download_paper.php?id=4869 |title=Источник |access-date=2016-11-30 |archive-date=2017-07-06 |archive-url=https://web.archive.org/web/20170706142016/http://atlantis-press.com/php/download_paper.php?id%3D4869 |url-status=live }}</ref>, но по состоянию на 2005 год в массовых процессорах четверная точность аппаратно не реализовывалась<ref name=Florent-quadandmore>{{Cite web |url=https://www-zeuthen.desy.de/acat05/talks/de_Dinechin.Florent.2/QuadAndMore.pdf |title=Источник |access-date=2016-11-30 |archive-date=2020-07-09 |archive-url=https://web.archive.org/web/20200709224615/https://www-zeuthen.desy.de/acat05/talks/de_Dinechin.Florent.2/QuadAndMore.pdf |url-status=live }}</ref>.

Для некоторых методов решения четверная точность позволяет ускорить сходимость (количество итераций метода) по сравнению с двойной точностью, при этом каждая итерация становится более долгой из-за использования программной реализации операций над числами<ref>{{Cite web |url=http://www.siam.org/meetings/la03/proceedings/hhasegaw.pdf |title=Источник |access-date=2016-11-30 |archive-date=2017-08-29 |archive-url=https://web.archive.org/web/20170829180116/http://www.siam.org/meetings/la03/proceedings/hhasegaw.pdf |url-status=live }}</ref>.

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

== См. также ==
* [[Числа с плавающей запятой]]
* [[Число половинной точности]]
* [[Число одинарной точности]]
* [[Число двойной точности]]
* [[Число восьмерной точности]]
* [[128 бит]]
* [[Интервальная арифметика]]

== Примечания ==
{{примечания}}

Реклама:

Навигация