<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9F%D0%B0%D1%80%D1%88%D1%83%D0%BA%D0%BE%D0%B2+%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9F%D0%B0%D1%80%D1%88%D1%83%D0%BA%D0%BE%D0%B2+%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9F%D0%B0%D1%80%D1%88%D1%83%D0%BA%D0%BE%D0%B2_%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB"/>
		<updated>2026-08-03T23:21:09Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47916</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47916"/>
				<updated>2015-06-06T21:06:01Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
  '''struct''' '''Query''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''uint''' prev&lt;br /&gt;
 &lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Query''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
Будем использовать узел, у которого будет значение и ссылка на прошлую версию стека. При этом сам узел - это версия стека.&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''T''' val = i.value &lt;br /&gt;
    i = i.prev&lt;br /&gt;
    '''return''' pair(val, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Используя персистентый стек, можно реализовать легко перстистентную очередь (если вспомнить её реализацию на двух стеках). &amp;lt;br&amp;gt;&lt;br /&gt;
См. [[Персистентная очередь]]&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47914</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47914"/>
				<updated>2015-06-06T21:01:38Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на списке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
Будем использовать узел, у которого будет значение и ссылка на прошлую версию стека. При этом сам узел - это версия стека.&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''T''' val = i.value &lt;br /&gt;
    i = i.prev&lt;br /&gt;
    '''return''' pair(val, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Используя персистентый стек, можно реализовать легко перстистентную очередь (если вспомнить её реализацию на двух стеках). &amp;lt;br&amp;gt;&lt;br /&gt;
См. [[Персистентная очередь]]&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47911</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47911"/>
				<updated>2015-06-06T20:57:13Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Применение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
Будем использовать узел, у которого будет значение и ссылка на прошлую версию стека. При этом сам узел - это версия стека.&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Используя персистентый стек, можно реализовать легко перстистентную очередь (если вспомнить её реализацию на двух стеках). &amp;lt;br&amp;gt;&lt;br /&gt;
См. [[Персистентная очередь]]&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47907</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47907"/>
				<updated>2015-06-06T20:45:54Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Применение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
Будем использовать узел, у которого будет значение и ссылка на прошлую версию стека. При этом сам узел - это версия стека.&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
В основном используется когда нужно быстрое обращение по результатам команд добавить/удалить.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47906</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47906"/>
				<updated>2015-06-06T20:43:57Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
Будем использовать узел, у которого будет значение и ссылка на прошлую версию стека. При этом сам узел - это версия стека.&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Персистентный стек используется не очень часто, так как сложные задачи с ним не придумать из-за его примитивности. В основном используется когда нужно быстрое обращение по результатам команд добавить/удалить.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47904</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47904"/>
				<updated>2015-06-06T20:40:15Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на массиве */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value // Значение в узле&lt;br /&gt;
    '''Node''' prev // Ссылка на прошлую версию&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Персистентный стек используется не очень часто, так как сложные задачи с ним не придумать из-за его примитивности. В основном используется когда нужно быстрое обращение по результатам команд добавить/удалить.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47903</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47903"/>
				<updated>2015-06-06T20:35:17Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Пример задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value // Значение в узле&lt;br /&gt;
    '''Node''' prev // Ссылка на прошлую версию&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Персистентный стек используется не очень часто, так как сложные задачи с ним не придумать из-за его примитивности. В основном используется когда нужно быстрое обращение по результатам команд добавить/удалить.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47888</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47888"/>
				<updated>2015-06-06T20:20:26Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на списке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value // Значение в узле&lt;br /&gt;
    '''Node''' prev // Ссылка на прошлую версию&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47887</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47887"/>
				<updated>2015-06-06T20:19:54Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на списке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value // Значение в узле&lt;br /&gt;
    '''Node''' prev // Ссылка на прошлую версию&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Сам персистентный стек будет обозначатся s.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47885</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47885"/>
				<updated>2015-06-06T20:17:42Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на списке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value // Значение в узле&lt;br /&gt;
    '''Node''' prev // Ссылка на прошлую версию&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47883</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47883"/>
				<updated>2015-06-06T20:13:48Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на массиве */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value // Значение в узле&lt;br /&gt;
    '''Node''' prev // Ссылка на прошлую версию&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47882</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47882"/>
				<updated>2015-06-06T20:13:09Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value // Значение в узле&lt;br /&gt;
    '''Node''' prev // Ссылка на прошлую версию&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47875</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47875"/>
				<updated>2015-06-06T19:53:56Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на массиве */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' s[i].value&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47874</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47874"/>
				<updated>2015-06-06T19:52:44Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    s.top = k&lt;br /&gt;
    '''return''' s&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair&amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
    '''return''' pair(i.value, s)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47873</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47873"/>
				<updated>2015-06-06T19:50:28Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на списке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;,&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    top = k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair &amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47872</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47872"/>
				<updated>2015-06-06T19:30:59Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Реализация на списке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Узел:&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''Stack''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    top = k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''pair &amp;lt;T, Stack&amp;gt;''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47871</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47871"/>
				<updated>2015-06-06T19:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Алгоритм ==&lt;br /&gt;
=== Реализация на массиве ===&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
=== Реализация на списке ===&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Узел:&lt;br /&gt;
  '''struct''' '''Node''':&lt;br /&gt;
    '''T''' value&lt;br /&gt;
    '''Node''' prev&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''Node''', x : '''T'''):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    top = k&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  '''T''' pop(i : '''Node'''):&lt;br /&gt;
    '''Node''' k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47862</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47862"/>
				<updated>2015-06-06T19:10:00Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Альтернативная реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Альтернативная реализация ==&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  function push(i : Node, x : T):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    top = k&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  T pop(i : Node):&lt;br /&gt;
    Node k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47861</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47861"/>
				<updated>2015-06-06T19:09:35Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Альтернативная реализация ==&lt;br /&gt;
&lt;br /&gt;
Обойдёмся без массива. Будем хранить состояния в узлах. Будем возвращать пользователю информацию о текущей вершине.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого узла будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и ссылка на предыдущую версию стека.&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек узла &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
  function push(i : Node, x : T):&lt;br /&gt;
    k.value = x&lt;br /&gt;
    k.prev = i&lt;br /&gt;
    top = k&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в узле &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него.&lt;br /&gt;
  T pop(i : Node)&lt;br /&gt;
    Node k = i.prev&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47845</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47845"/>
				<updated>2015-06-06T18:33:23Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== Пример задачи ==&lt;br /&gt;
N детей по очереди лепят снеговиков. Первый ребенок слепил снеговик из одного шара радиусом R1. Каждый следующий ребенок слепил      такого же снеговика, как и предыдущий, но подумав немного либо добавил шар радиусом Ri, либо разрушил верхний, уже имеющийся шар.  Гарантируется, что все снеговики имеют строго положительное число шаров. Входные данные — N, информация о каждом из детей о том,  разрушил ли он последний шар, либо добавил свой (тогда дается и его радиус). Далее дается набор из K чисел в пределах от 1-го до N, для каждого требуется вывести последовательность шаров в снеговике с таким номером. Ограничение на N и K — миллион.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47663</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47663"/>
				<updated>2015-06-05T18:47:17Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Эффективная реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    '''Node''' k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47662</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47662"/>
				<updated>2015-06-05T18:37:20Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr {{---}} Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47661</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47661"/>
				<updated>2015-06-05T18:36:51Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;\mathtt{null}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr - Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47660</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47660"/>
				<updated>2015-06-05T18:33:10Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr - Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47659</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47659"/>
				<updated>2015-06-05T18:29:30Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Эффективная реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в стек с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и копирует элемент, предыдущий для него,&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
* Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr - Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47655</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47655"/>
				<updated>2015-06-05T18:19:56Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Попробуем решить задачу эффективнее. Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент х в стек с номером i, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером i и копирует элемент, предыдущий для него.&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
* Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr - Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;br /&gt;
[[Категория: Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47654</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47654"/>
				<updated>2015-06-05T18:18:54Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Эффективная реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Попробуем решить задачу эффективнее. Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент х в стек с номером i, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером i и копирует элемент, предыдущий для него.&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
* Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr - Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47653</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47653"/>
				<updated>2015-06-05T18:18:29Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Попробуем решить задачу эффективнее. Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет 2 поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент х в стек с номером i, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером i и копирует элемент, предыдущий для него.&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
* Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr - Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47652</id>
		<title>Персистентный стек</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D1%82%D0%B5%D0%BA&amp;diff=47652"/>
				<updated>2015-06-05T18:16:33Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Эффективная реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Эффективная реализация ==&lt;br /&gt;
&lt;br /&gt;
Попробуем решить задачу эффективнее. Заведем массив запросов, модифицирующих стек.&amp;lt;br&amp;gt;&lt;br /&gt;
У каждого элемента массива будет 2 поля: значение в вершине стека и индекс предыдущей версии стека.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда операции push и pop будут иметь следующий вид:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \mathrm{push}(i, x)&amp;lt;/tex&amp;gt; {{---}} добавляет элемент х в стек с номером i, результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''function''' push(i : '''uint''', x : '''T'''):&lt;br /&gt;
    s.top = s.top + 1&lt;br /&gt;
    s[s.top].value = x&lt;br /&gt;
    s[s.top].prev = i &lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathrm{pop}(i)&amp;lt;/tex&amp;gt; {{---}} возвращает значение, хранящееся в элементе с номером i и копирует элемент, предыдущий для него.&lt;br /&gt;
результирующий стек будет иметь номер &amp;lt;tex&amp;gt; n + 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
  '''T''' pop(i : '''uint'''):&lt;br /&gt;
    T k = s[i]&lt;br /&gt;
    k = s[k.prev]&lt;br /&gt;
    push(k.prev, k.value)&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&lt;br /&gt;
* Пусть изначально у нас есть один пустой стек. Запишем его в массив.&lt;br /&gt;
[[Файл:стек1.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Далее выполним &amp;lt;tex&amp;gt;\mathrm{push}(1, 3)&amp;lt;/tex&amp;gt;. Создается новая вершина со значением 3, ссылающаяся на 1-ую, помещаем ее во 2-ую ячейку массива:&lt;br /&gt;
[[Файл:стек2.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Аналогично выполним &amp;lt;tex&amp;gt;\mathrm{push}(2, 5)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
[[Файл:стек3.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Выполним &amp;lt;tex&amp;gt;\mathrm{pop}(3)&amp;lt;/tex&amp;gt;. он возвращает 5 и копирует 2-ую вершину.&lt;br /&gt;
[[Файл:стек4.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Так будет выглядеть массив после последовательности операций &amp;lt;tex&amp;gt;\mathrm{push}(3, 6),  \mathrm{push}(5, 1),  \mathrm{pop}(4),  \mathrm{pop}(5),  \mathrm{push}(7, 9):&amp;lt;/tex&amp;gt;&lt;br /&gt;
[[Файл:стек.png|500px|nothumb|right|]]&lt;br /&gt;
{| border = 1; cellspacing = 0; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- align = &amp;quot;center&amp;quot;&lt;br /&gt;
!index&lt;br /&gt;
!1&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;3&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;4&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;5&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
!&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!value&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|5&lt;br /&gt;
|9&lt;br /&gt;
|-align = &amp;quot;center&amp;quot;&lt;br /&gt;
!prev&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|5&lt;br /&gt;
|&amp;lt;tex&amp;gt;null&amp;lt;/tex&amp;gt;&lt;br /&gt;
|2&lt;br /&gt;
|7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В итоге мы имеем доступ ко всем версиям стека за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени и &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [http://habrahabr.ru/blogs/algorithm/113585/ Habrahabr - Персистентный стек]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47650</id>
		<title>АВЛ-дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47650"/>
				<updated>2015-06-05T18:11:37Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Балансировка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''АВЛ-дерево''' (англ. ''AVL-Tree'') {{---}} сбалансированное [[Дерево поиска, наивная реализация|двоичное дерево поиска]], в котором поддерживается следующее свойство: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.&lt;br /&gt;
&lt;br /&gt;
АВЛ-деревья названы по первым буквам фамилий их изобретателей, Г. М. Адельсона-Вельского и Е. М. Ландиса, которые впервые предложили использовать АВЛ-деревья в 1962 году.&lt;br /&gt;
&lt;br /&gt;
== Высота дерева ==&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=АВЛ-дерево с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ключами имеет высоту &amp;lt;tex&amp;gt;h = O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
||proof=&lt;br /&gt;
&lt;br /&gt;
Высоту поддерева с корнем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; будем обозначать как &amp;lt;tex&amp;gt;h(x)&amp;lt;/tex&amp;gt;, высоту поддерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} как &amp;lt;tex&amp;gt;h(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt;, где            &amp;lt;tex&amp;gt;F_h - h&amp;lt;/tex&amp;gt;-ое число Фибоначчи.  &lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;. Тогда, как легко видеть, &amp;lt;tex&amp;gt;m_{h+2} = m_{h+1} + m_h + 1&amp;lt;/tex&amp;gt;. Равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; докажем по индукции. &lt;br /&gt;
&lt;br /&gt;
База индукции &amp;lt;tex&amp;gt;m_1 = F_3 - 1&amp;lt;/tex&amp;gt; {{---}} верно, &amp;lt;tex&amp;gt;m_1 = 1, F_3 = 2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Допустим &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} верно. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;m_{h+1} = m_h + m_{h-1} + 1 = F_{h+2} - 1 + F_{h+1} - 1 + 1 = F_{h+3} - 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} доказано.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_h = \Omega(\varphi^h)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\varphi = \dfrac{ \sqrt{5}+1}{2}&amp;lt;/tex&amp;gt;. То есть&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \varphi^{h}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логарифмируя по основанию &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\log_{\varphi}n \geqslant h&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,  получаем, что высота AVL-дерева из n вершин {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Балансировка ==&lt;br /&gt;
'''Балансировкой вершины''' называется операция, которая в случае разницы высот левого и правого поддеревьев &amp;lt;tex&amp;gt;|h(L) - h(R)| = 2&amp;lt;/tex&amp;gt;, изменяет связи предок-потомок в поддереве данной вершины так, чтобы восстановилось свойство дерева &amp;lt;tex&amp;gt;|h(L) - h(R)| \leqslant 1&amp;lt;/tex&amp;gt;, иначе ничего не меняет.&lt;br /&gt;
Для балансировки будем хранить для каждой вершины разницу между высотой её левого и правого поддерева &amp;lt;tex&amp;gt;diff[i] = h(L) - h(R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для балансировки вершины используются один из 4 типов вращений:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
 !Тип вращения&lt;br /&gt;
 !Иллюстрация&lt;br /&gt;
 !Когда используется&lt;br /&gt;
 !Расстановка балансов&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Малое левое вращение'''&lt;br /&gt;
 |  [[Файл:avl_u1.jpg|2000x200px]]  &lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Большое левое вращение'''&lt;br /&gt;
 | [[Файл:avl_u2.jpg|2000x200px]]&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
Малый левый поворот:&lt;br /&gt;
  '''function''' rotateLeft(Node a):&lt;br /&gt;
    Node b = a.right&lt;br /&gt;
    a.right = b.left&lt;br /&gt;
    b.left = a&lt;br /&gt;
    корректировка высоты a&lt;br /&gt;
    корректировка высоты b&lt;br /&gt;
&lt;br /&gt;
Большой правый поворот пишется проще:&lt;br /&gt;
  '''function''' bigRotateLeft(Node a):&lt;br /&gt;
    rotateRight(a.right)&lt;br /&gt;
    rotateLeft(a)&lt;br /&gt;
  &lt;br /&gt;
Малое правое и большое правое вращение определяются симметрично малому левому и большому левому вращению.&lt;br /&gt;
В каждом случае операция приводит к нужному результату, а полная высота уменьшается не более чем на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и не может увеличиться.&lt;br /&gt;
&lt;br /&gt;
Все вращения, очевидно, требуют &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Добавление вершины ===&lt;br /&gt;
Пусть нам надо добавить ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Будем спускаться по дереву, как при поиске ключа &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Если мы стоим в вершине &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и нам надо идти в поддерево, которого нет, то делаем ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; листом, а вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; его корнем. Дальше поднимаемся вверх по пути поиска и пересчитываем баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; увеличивается на единицу, если из правого, то уменьшается на единицу. Если пришли в вершину и её баланс стал равным нулю, то это значит высота поддерева не изменилась и подъём останавливается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит высота поддерева изменилась и подъём продолжается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, то делаем одно из четырёх вращений и, если после вращения баланс стал равным нулю, то останавливаемся, иначе продолжаем подъём.&lt;br /&gt;
&lt;br /&gt;
Так как в процессе добавления вершины мы рассматриваем не более, чем &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; вершин дерева, и для каждой запускаем балансировку не более одного раза, то суммарное количество операций при включении новой вершины в дерево составляет &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Удаление вершины ===&lt;br /&gt;
Для простоты опишем рекурсивный алгоритм удаления.&lt;br /&gt;
Если вершина {{---}} лист, то [[Дерево поиска, наивная реализация#Удаление|удалим]] её, иначе найдём самую близкую по значению вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, переместим её на место удаляемой вершины и [[Дерево поиска, наивная реализация#Удаление|удалим]] вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;. От удалённой вершины будем подниматься вверх к корню и пересчитывать баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; уменьшается на единицу, если из правого, то увеличивается на единицу. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит, что высота этого поддерева не изменилась и подъём можно остановить. Если баланс вершины стал равным нулю, то высота поддерева уменьшилась и подъём нужно продолжить. Если баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, следует выполнить одно из четырёх вращений и, если после вращений баланс вершины стал равным нулю, то подъём продолжается, иначе останавливается.&lt;br /&gt;
&lt;br /&gt;
В результате указанных действий на удаление вершины и балансировку суммарно тратится, как и ранее, &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; операций. Таким образом, требуемое количество действий {{---}} &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Поиск вершины, минимум/максимум в дереве, etc. ===&lt;br /&gt;
Остальные операции не меняют структуры дерева, поэтому выполняются так же, как и в [[Дерево поиска, наивная реализация|наивной реализации]] дерева поиска.&lt;br /&gt;
===Слияние двух AVL-деревьев===&lt;br /&gt;
&lt;br /&gt;
Дано два дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, все ключи в &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h(T_1) \leqslant h(T_2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В дереве &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; удаляем самую правую вершину, назовём её &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Высота дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; может уменьшиться на единицу. В дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; идём от корня всегда в левое поддерево и, когда высота этого поддерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; будет равна высоте дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, делаем новое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корнем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет вершина &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, левым поддеревом будет дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, а правым дерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Теперь в дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; у вершины, в которой мы остановились при спуске, левым поддеревом делаем дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Таким образом, дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; будет результатом слияния двух АВЛ-деревьев.&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; до слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u3.jpg|340px]]&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; после слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
===Алгоритм разделения AVL-дерева на два===&lt;br /&gt;
====Алгоритм первый====&lt;br /&gt;
Пусть у нас есть дерево &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;. Мы должны разбить его на два дерева &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;T_{1} \leqslant x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x &amp;lt; T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что корень нашего дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, в таком случае все левое поддерево вместе с корнем после разделения отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда рекурсивно спускаемся в правое поддерево и там проверяем это условие (так как часть правого поддерева тоже может содержать ключи &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;). Если же корень оказался &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, то мы спускаемся той же рекурсией, но только в левое поддерево и ищем там.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. В таком случае этот корень со своим левым поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Поэтому мы делаем следующее: запоминаем ссылку на правое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, удаляем корень, запоминая его значение (не меняя конфигурацию дерева, то есть просто делаем ссылки на него NULL'ами). Таким образом, мы отделяем сбалансированное АВЛ-дерево (бывшее левое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Делаем новую вершину со значением бывшего корня правым листом самой правой вершины &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Обозначим полученное дерево за &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;. Теперь нам нужно объединить его с уже построенным ранее &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (оно может быть пустым, если мы первый раз нашли такое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Для этого мы ищем в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; самое правое поддерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; высоты, равной высоте &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (спускаясь от корня всегда в правые поддеревья). Делаем новое дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, сливая &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (очевидно, все ключи в &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, поэтому мы можем это сделать). Теперь в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; у отца вершины, в которой мы остановились при поиске дерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, правым поддеревом делаем дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; и запускаем балансировку. После нужно спуститься в правое поддерево бывшего дерева &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (по ссылке, которую мы ранее запомнили) и обработать его.&lt;br /&gt;
&lt;br /&gt;
Если мы пришли в поддерево &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, совершаем аналогичные действия: делаем NULL'ами ссылки на корень &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, запоминая ссылку на его левое поддерево. Делаем новую вершину со значением бывшего корня левым листом самой левой вершины &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; и запускаем балансировку. Объединяем полученное АВЛ-дерево с уже построенным ранее &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; аналогичным первому случаю способом, только теперь мы ищем самое левое поддерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотри пример (рис. 1). Цветом выделены поддеревья, которые после разделения должны отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;x = 76&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL.jpg|thumb|left|525px|Рис. 1. Разделение АВЛ-дерева на два.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Корень дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, поэтому он со всем выделенным поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. По описанному выше алгоритму отделяем это поддерево с корнем и делаем из них сбалансированное АВЛ-дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (рис. 2). Так как это первая ситуация, в которой корень рассматриваемого поддерева был &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; становится &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Далее по сохраненной ссылке спускаемся в правое поддерево. Его корень &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Следовательно, строим из него и его правого поддерева &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и спускаемся в левое поддерево. Снова корень &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Строим новое &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; и объединяем его с уже существующим &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (рис. 3).&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:АВВЛ2.jpg|thumb|left|525px|Рис. 2. Создание T'.]]&lt;br /&gt;
|}&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL3.jpg|thumb|left|1050px|Рис. 3. Объединение T' и T1.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Далее действуем по алгоритму и в итоге получаем (рис. 4):&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:End.jpg|thumb|left|525px|Рис. 4. АВЛ-деревья после разделения.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм имеет сложность &amp;lt;tex&amp;gt;O(\log^{2} n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Алгоритм второй====&lt;br /&gt;
Рассмотрим решение, которое имеет сложность &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вернемся к примеру (рис. 1). Теперь рекурсивно спустимся вниз и оттуда будем строить деревья &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;, передавая наверх корректные АВЛ-деревья. То есть для рис. 1 первым в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; придет вершина &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt; с левым поддеревом (выделено светло-зеленым цветом), так как это корректное АВЛ-дерево, оно же и вернется из рекурсии. Далее мы попадем в вершину со значением &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt; и должны слить ее и ее левое поддерево (выделено светло-синим) с тем, что нам пришло. И сделать это нужно так, чтобы передать наверх корректное АВЛ-дерево. Будем действовать по такому алгоритму, пока не дойдем до вершины.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; с корнем &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Тогда сольем его с уже построенным на тот момент &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; пришло снизу, а значит по условию рекурсии это корректное АВЛ-дерево, &amp;lt;tex&amp;gt;S \leqslant T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;h(T_{1}) \leqslant h(S)&amp;lt;/tex&amp;gt;). Но так как обычная процедура слияния сливает два АВЛ-дерева, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не является корректным АВЛ-деревом, мы немного ее изменим. Пусть мы в дереве &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; нашли самое правое поддерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, высота которого равна высоте &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда сделаем новое дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, корнем которого будет вершина &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (без нее это дерево является сбалансированным), правым поддеревом {{---}} &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, левым {{---}} &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. И подвесим &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; на то место, где мы остановились при поиске &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. Запустим балансировку. В случае, когда корень поддерева, в которое мы пришли, &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, все аналогично.&lt;br /&gt;
&lt;br /&gt;
Разберем пример на рис. 1. Пусть мы рекурсивно спустились до узла &amp;lt;tex&amp;gt;77&amp;lt;/tex&amp;gt;. Ключ больше &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, поэтому эта вершина станет деревом &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и передастся наверх. Теперь мы поднялись в узел &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом станет деревом &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и мы снова поднимемся наверх в узел &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом снова должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, и так как теперь дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; уже не пустое, то их надо слить. После слияния по описанному выше алгоритму получим (рис. 5)&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex.jpg|thumb|left|525px|Рис. 5.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
После мы поднимемся в вершину с ключом &amp;lt;tex&amp;gt;80&amp;lt;/tex&amp;gt;. Она с правым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; (рис. 6). &lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex2am.jpg|thumb|left|525px|Рис. 6.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
И на последней итерации мы поднимемся в корень дерева с ключом &amp;lt;tex&amp;gt;50&amp;lt;/tex&amp;gt;, он с левым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, после чего алгоритм завершится.&lt;br /&gt;
&lt;br /&gt;
Пусть поддеревьев с ключами &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt; оказалось больше, чем поддеревьев с ключами &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Докажем для них логарифмическую асимптотику. Дерево на последнем уровне имеет высоту &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; (она может быть не равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, если мы придём в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;). Его мы передаем наверх и вставляем в поддерево высотой &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;H_{k} \leqslant H_{k-1}&amp;lt;/tex&amp;gt;, так как разница высот поддеревьев у любой вершины не больше &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, и мы при переходе от &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt; поднимаемся как минимум на одну вершину вверх. Слияние этих поддеревьев мы выполним за &amp;lt;tex&amp;gt;H_{k-1} - H_{k}&amp;lt;/tex&amp;gt;, получим в итоге дерево высоты не большей, чем &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. Его мы передадим наверх, поэтому в следующий раз слияние будет выполнено за &amp;lt;tex&amp;gt;H_{k-2} - H_{k - 1}&amp;lt;/tex&amp;gt; и так далее. Таким образом мы получим &amp;lt;tex&amp;gt;(H - H_{1}) + (H_{1} - H_{2}) + (H_{2} - H_{3}) + \cdots +  (H_{k - 1} - H_{k}) = H - H_{k} = O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итоговая асимптотика алгоритма {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://habrahabr.ru/post/150732/ Habrahabr {{---}} АВЛ-деревья]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/АВЛ-дерево Википедия {{---}} АВЛ-дерево]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;br /&gt;
[[Категория:Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47648</id>
		<title>АВЛ-дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47648"/>
				<updated>2015-06-05T18:09:57Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Балансировка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''АВЛ-дерево''' (англ. ''AVL-Tree'') {{---}} сбалансированное [[Дерево поиска, наивная реализация|двоичное дерево поиска]], в котором поддерживается следующее свойство: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.&lt;br /&gt;
&lt;br /&gt;
АВЛ-деревья названы по первым буквам фамилий их изобретателей, Г. М. Адельсона-Вельского и Е. М. Ландиса, которые впервые предложили использовать АВЛ-деревья в 1962 году.&lt;br /&gt;
&lt;br /&gt;
== Высота дерева ==&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=АВЛ-дерево с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ключами имеет высоту &amp;lt;tex&amp;gt;h = O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
||proof=&lt;br /&gt;
&lt;br /&gt;
Высоту поддерева с корнем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; будем обозначать как &amp;lt;tex&amp;gt;h(x)&amp;lt;/tex&amp;gt;, высоту поддерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} как &amp;lt;tex&amp;gt;h(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt;, где            &amp;lt;tex&amp;gt;F_h - h&amp;lt;/tex&amp;gt;-ое число Фибоначчи.  &lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;. Тогда, как легко видеть, &amp;lt;tex&amp;gt;m_{h+2} = m_{h+1} + m_h + 1&amp;lt;/tex&amp;gt;. Равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; докажем по индукции. &lt;br /&gt;
&lt;br /&gt;
База индукции &amp;lt;tex&amp;gt;m_1 = F_3 - 1&amp;lt;/tex&amp;gt; {{---}} верно, &amp;lt;tex&amp;gt;m_1 = 1, F_3 = 2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Допустим &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} верно. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;m_{h+1} = m_h + m_{h-1} + 1 = F_{h+2} - 1 + F_{h+1} - 1 + 1 = F_{h+3} - 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} доказано.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_h = \Omega(\varphi^h)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\varphi = \dfrac{ \sqrt{5}+1}{2}&amp;lt;/tex&amp;gt;. То есть&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \varphi^{h}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логарифмируя по основанию &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\log_{\varphi}n \geqslant h&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,  получаем, что высота AVL-дерева из n вершин {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Балансировка ==&lt;br /&gt;
'''Балансировкой вершины''' называется операция, которая в случае разницы высот левого и правого поддеревьев &amp;lt;tex&amp;gt;|h(L) - h(R)| = 2&amp;lt;/tex&amp;gt;, изменяет связи предок-потомок в поддереве данной вершины так, чтобы восстановилось свойство дерева &amp;lt;tex&amp;gt;|h(L) - h(R)| \leqslant 1&amp;lt;/tex&amp;gt;, иначе ничего не меняет.&lt;br /&gt;
Для балансировки будем хранить для каждой вершины разницу между высотой её левого и правого поддерева &amp;lt;tex&amp;gt;diff[i] = h(L) - h(R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для балансировки вершины используются один из 4 типов вращений:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
 !Тип вращения&lt;br /&gt;
 !Иллюстрация&lt;br /&gt;
 !Когда используется&lt;br /&gt;
 !Расстановка балансов&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Малое левое вращение'''&lt;br /&gt;
 |  [[Файл:avl_u1.jpg|2000x200px]]  &lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Большое левое вращение'''&lt;br /&gt;
 | [[Файл:avl_u2.jpg|2000x200px]]&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
Малый левый поворот:&lt;br /&gt;
  '''function''' rotateLeft(Node a):&lt;br /&gt;
    Node b = a.right&lt;br /&gt;
    a.right = b.left&lt;br /&gt;
    b.left = a&lt;br /&gt;
    корректировка высоты a&lt;br /&gt;
    корректировка высоты b&lt;br /&gt;
&lt;br /&gt;
Большой правый поворот пишется проще:&lt;br /&gt;
  '''function''' bigRotateLeft(Node a):&lt;br /&gt;
    rotateRight(a.right)&lt;br /&gt;
    rotateLeft(a)&lt;br /&gt;
  &lt;br /&gt;
Малое правое и большое правое вращение определяются симметрично малому левому и большому левому вращению.&lt;br /&gt;
В каждом случае операция приводит к нужному результату, а полная высота уменьшается не более чем на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и не может увеличиться.&lt;br /&gt;
&lt;br /&gt;
Все операции вращения, очевидно, требуют &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Добавление вершины ===&lt;br /&gt;
Пусть нам надо добавить ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Будем спускаться по дереву, как при поиске ключа &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Если мы стоим в вершине &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и нам надо идти в поддерево, которого нет, то делаем ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; листом, а вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; его корнем. Дальше поднимаемся вверх по пути поиска и пересчитываем баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; увеличивается на единицу, если из правого, то уменьшается на единицу. Если пришли в вершину и её баланс стал равным нулю, то это значит высота поддерева не изменилась и подъём останавливается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит высота поддерева изменилась и подъём продолжается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, то делаем одно из четырёх вращений и, если после вращения баланс стал равным нулю, то останавливаемся, иначе продолжаем подъём.&lt;br /&gt;
&lt;br /&gt;
Так как в процессе добавления вершины мы рассматриваем не более, чем &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; вершин дерева, и для каждой запускаем балансировку не более одного раза, то суммарное количество операций при включении новой вершины в дерево составляет &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Удаление вершины ===&lt;br /&gt;
Для простоты опишем рекурсивный алгоритм удаления.&lt;br /&gt;
Если вершина {{---}} лист, то [[Дерево поиска, наивная реализация#Удаление|удалим]] её, иначе найдём самую близкую по значению вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, переместим её на место удаляемой вершины и [[Дерево поиска, наивная реализация#Удаление|удалим]] вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;. От удалённой вершины будем подниматься вверх к корню и пересчитывать баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; уменьшается на единицу, если из правого, то увеличивается на единицу. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит, что высота этого поддерева не изменилась и подъём можно остановить. Если баланс вершины стал равным нулю, то высота поддерева уменьшилась и подъём нужно продолжить. Если баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, следует выполнить одно из четырёх вращений и, если после вращений баланс вершины стал равным нулю, то подъём продолжается, иначе останавливается.&lt;br /&gt;
&lt;br /&gt;
В результате указанных действий на удаление вершины и балансировку суммарно тратится, как и ранее, &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; операций. Таким образом, требуемое количество действий {{---}} &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Поиск вершины, минимум/максимум в дереве, etc. ===&lt;br /&gt;
Остальные операции не меняют структуры дерева, поэтому выполняются так же, как и в [[Дерево поиска, наивная реализация|наивной реализации]] дерева поиска.&lt;br /&gt;
===Слияние двух AVL-деревьев===&lt;br /&gt;
&lt;br /&gt;
Дано два дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, все ключи в &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h(T_1) \leqslant h(T_2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В дереве &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; удаляем самую правую вершину, назовём её &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Высота дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; может уменьшиться на единицу. В дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; идём от корня всегда в левое поддерево и, когда высота этого поддерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; будет равна высоте дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, делаем новое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корнем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет вершина &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, левым поддеревом будет дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, а правым дерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Теперь в дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; у вершины, в которой мы остановились при спуске, левым поддеревом делаем дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Таким образом, дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; будет результатом слияния двух АВЛ-деревьев.&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; до слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u3.jpg|340px]]&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; после слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
===Алгоритм разделения AVL-дерева на два===&lt;br /&gt;
====Алгоритм первый====&lt;br /&gt;
Пусть у нас есть дерево &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;. Мы должны разбить его на два дерева &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;T_{1} \leqslant x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x &amp;lt; T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что корень нашего дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, в таком случае все левое поддерево вместе с корнем после разделения отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда рекурсивно спускаемся в правое поддерево и там проверяем это условие (так как часть правого поддерева тоже может содержать ключи &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;). Если же корень оказался &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, то мы спускаемся той же рекурсией, но только в левое поддерево и ищем там.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. В таком случае этот корень со своим левым поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Поэтому мы делаем следующее: запоминаем ссылку на правое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, удаляем корень, запоминая его значение (не меняя конфигурацию дерева, то есть просто делаем ссылки на него NULL'ами). Таким образом, мы отделяем сбалансированное АВЛ-дерево (бывшее левое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Делаем новую вершину со значением бывшего корня правым листом самой правой вершины &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Обозначим полученное дерево за &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;. Теперь нам нужно объединить его с уже построенным ранее &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (оно может быть пустым, если мы первый раз нашли такое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Для этого мы ищем в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; самое правое поддерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; высоты, равной высоте &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (спускаясь от корня всегда в правые поддеревья). Делаем новое дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, сливая &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (очевидно, все ключи в &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, поэтому мы можем это сделать). Теперь в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; у отца вершины, в которой мы остановились при поиске дерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, правым поддеревом делаем дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; и запускаем балансировку. После нужно спуститься в правое поддерево бывшего дерева &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (по ссылке, которую мы ранее запомнили) и обработать его.&lt;br /&gt;
&lt;br /&gt;
Если мы пришли в поддерево &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, совершаем аналогичные действия: делаем NULL'ами ссылки на корень &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, запоминая ссылку на его левое поддерево. Делаем новую вершину со значением бывшего корня левым листом самой левой вершины &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; и запускаем балансировку. Объединяем полученное АВЛ-дерево с уже построенным ранее &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; аналогичным первому случаю способом, только теперь мы ищем самое левое поддерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотри пример (рис. 1). Цветом выделены поддеревья, которые после разделения должны отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;x = 76&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL.jpg|thumb|left|525px|Рис. 1. Разделение АВЛ-дерева на два.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Корень дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, поэтому он со всем выделенным поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. По описанному выше алгоритму отделяем это поддерево с корнем и делаем из них сбалансированное АВЛ-дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (рис. 2). Так как это первая ситуация, в которой корень рассматриваемого поддерева был &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; становится &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Далее по сохраненной ссылке спускаемся в правое поддерево. Его корень &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Следовательно, строим из него и его правого поддерева &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и спускаемся в левое поддерево. Снова корень &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Строим новое &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; и объединяем его с уже существующим &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (рис. 3).&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:АВВЛ2.jpg|thumb|left|525px|Рис. 2. Создание T'.]]&lt;br /&gt;
|}&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL3.jpg|thumb|left|1050px|Рис. 3. Объединение T' и T1.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Далее действуем по алгоритму и в итоге получаем (рис. 4):&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:End.jpg|thumb|left|525px|Рис. 4. АВЛ-деревья после разделения.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм имеет сложность &amp;lt;tex&amp;gt;O(\log^{2} n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Алгоритм второй====&lt;br /&gt;
Рассмотрим решение, которое имеет сложность &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вернемся к примеру (рис. 1). Теперь рекурсивно спустимся вниз и оттуда будем строить деревья &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;, передавая наверх корректные АВЛ-деревья. То есть для рис. 1 первым в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; придет вершина &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt; с левым поддеревом (выделено светло-зеленым цветом), так как это корректное АВЛ-дерево, оно же и вернется из рекурсии. Далее мы попадем в вершину со значением &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt; и должны слить ее и ее левое поддерево (выделено светло-синим) с тем, что нам пришло. И сделать это нужно так, чтобы передать наверх корректное АВЛ-дерево. Будем действовать по такому алгоритму, пока не дойдем до вершины.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; с корнем &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Тогда сольем его с уже построенным на тот момент &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; пришло снизу, а значит по условию рекурсии это корректное АВЛ-дерево, &amp;lt;tex&amp;gt;S \leqslant T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;h(T_{1}) \leqslant h(S)&amp;lt;/tex&amp;gt;). Но так как обычная процедура слияния сливает два АВЛ-дерева, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не является корректным АВЛ-деревом, мы немного ее изменим. Пусть мы в дереве &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; нашли самое правое поддерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, высота которого равна высоте &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда сделаем новое дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, корнем которого будет вершина &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (без нее это дерево является сбалансированным), правым поддеревом {{---}} &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, левым {{---}} &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. И подвесим &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; на то место, где мы остановились при поиске &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. Запустим балансировку. В случае, когда корень поддерева, в которое мы пришли, &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, все аналогично.&lt;br /&gt;
&lt;br /&gt;
Разберем пример на рис. 1. Пусть мы рекурсивно спустились до узла &amp;lt;tex&amp;gt;77&amp;lt;/tex&amp;gt;. Ключ больше &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, поэтому эта вершина станет деревом &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и передастся наверх. Теперь мы поднялись в узел &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом станет деревом &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и мы снова поднимемся наверх в узел &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом снова должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, и так как теперь дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; уже не пустое, то их надо слить. После слияния по описанному выше алгоритму получим (рис. 5)&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex.jpg|thumb|left|525px|Рис. 5.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
После мы поднимемся в вершину с ключом &amp;lt;tex&amp;gt;80&amp;lt;/tex&amp;gt;. Она с правым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; (рис. 6). &lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex2am.jpg|thumb|left|525px|Рис. 6.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
И на последней итерации мы поднимемся в корень дерева с ключом &amp;lt;tex&amp;gt;50&amp;lt;/tex&amp;gt;, он с левым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, после чего алгоритм завершится.&lt;br /&gt;
&lt;br /&gt;
Пусть поддеревьев с ключами &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt; оказалось больше, чем поддеревьев с ключами &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Докажем для них логарифмическую асимптотику. Дерево на последнем уровне имеет высоту &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; (она может быть не равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, если мы придём в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;). Его мы передаем наверх и вставляем в поддерево высотой &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;H_{k} \leqslant H_{k-1}&amp;lt;/tex&amp;gt;, так как разница высот поддеревьев у любой вершины не больше &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, и мы при переходе от &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt; поднимаемся как минимум на одну вершину вверх. Слияние этих поддеревьев мы выполним за &amp;lt;tex&amp;gt;H_{k-1} - H_{k}&amp;lt;/tex&amp;gt;, получим в итоге дерево высоты не большей, чем &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. Его мы передадим наверх, поэтому в следующий раз слияние будет выполнено за &amp;lt;tex&amp;gt;H_{k-2} - H_{k - 1}&amp;lt;/tex&amp;gt; и так далее. Таким образом мы получим &amp;lt;tex&amp;gt;(H - H_{1}) + (H_{1} - H_{2}) + (H_{2} - H_{3}) + \cdots +  (H_{k - 1} - H_{k}) = H - H_{k} = O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итоговая асимптотика алгоритма {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://habrahabr.ru/post/150732/ Habrahabr {{---}} АВЛ-деревья]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/АВЛ-дерево Википедия {{---}} АВЛ-дерево]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;br /&gt;
[[Категория:Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47647</id>
		<title>АВЛ-дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47647"/>
				<updated>2015-06-05T18:07:34Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Балансировка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''АВЛ-дерево''' (англ. ''AVL-Tree'') {{---}} сбалансированное [[Дерево поиска, наивная реализация|двоичное дерево поиска]], в котором поддерживается следующее свойство: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.&lt;br /&gt;
&lt;br /&gt;
АВЛ-деревья названы по первым буквам фамилий их изобретателей, Г. М. Адельсона-Вельского и Е. М. Ландиса, которые впервые предложили использовать АВЛ-деревья в 1962 году.&lt;br /&gt;
&lt;br /&gt;
== Высота дерева ==&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=АВЛ-дерево с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ключами имеет высоту &amp;lt;tex&amp;gt;h = O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
||proof=&lt;br /&gt;
&lt;br /&gt;
Высоту поддерева с корнем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; будем обозначать как &amp;lt;tex&amp;gt;h(x)&amp;lt;/tex&amp;gt;, высоту поддерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} как &amp;lt;tex&amp;gt;h(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt;, где            &amp;lt;tex&amp;gt;F_h - h&amp;lt;/tex&amp;gt;-ое число Фибоначчи.  &lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;. Тогда, как легко видеть, &amp;lt;tex&amp;gt;m_{h+2} = m_{h+1} + m_h + 1&amp;lt;/tex&amp;gt;. Равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; докажем по индукции. &lt;br /&gt;
&lt;br /&gt;
База индукции &amp;lt;tex&amp;gt;m_1 = F_3 - 1&amp;lt;/tex&amp;gt; {{---}} верно, &amp;lt;tex&amp;gt;m_1 = 1, F_3 = 2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Допустим &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} верно. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;m_{h+1} = m_h + m_{h-1} + 1 = F_{h+2} - 1 + F_{h+1} - 1 + 1 = F_{h+3} - 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} доказано.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_h = \Omega(\varphi^h)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\varphi = \dfrac{ \sqrt{5}+1}{2}&amp;lt;/tex&amp;gt;. То есть&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \varphi^{h}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логарифмируя по основанию &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\log_{\varphi}n \geqslant h&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,  получаем, что высота AVL-дерева из n вершин {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Балансировка ==&lt;br /&gt;
'''Балансировкой вершины''' называется операция, которая в случае разницы высот левого и правого поддеревьев &amp;lt;tex&amp;gt;|h(L) - h(R)| = 2&amp;lt;/tex&amp;gt;, изменяет связи предок-потомок в поддереве данной вершины так, чтобы восстановилось свойство дерева &amp;lt;tex&amp;gt;|h(L) - h(R)| \leqslant 1&amp;lt;/tex&amp;gt;, иначе ничего не меняет.&lt;br /&gt;
Для балансировки будем хранить для каждой вершины разницу между высотой её левого и правого поддерева &amp;lt;tex&amp;gt;diff[i] = h(L) - h(R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для балансировки вершины используются один из 4 типов вращений:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
 !Тип вращения&lt;br /&gt;
 !Иллюстрация&lt;br /&gt;
 !Когда используется&lt;br /&gt;
 !Расстановка балансов&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Малое левое вращение'''&lt;br /&gt;
 |  [[Файл:avl_u1.jpg|2000x200px]]  &lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Большое левое вращение'''&lt;br /&gt;
 | [[Файл:avl_u2.jpg|2000x200px]]&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
Малый левый поворот:&lt;br /&gt;
  '''function''' rotateleft(Node a):&lt;br /&gt;
    Node b = a.right&lt;br /&gt;
    a.right = b.left&lt;br /&gt;
    b.left = a&lt;br /&gt;
    fixheight(a)&lt;br /&gt;
    fixheight(b)&lt;br /&gt;
&lt;br /&gt;
Большой правый поворот пишется проще:&lt;br /&gt;
  '''function''' bigrotateleft(Node a):&lt;br /&gt;
    rotateright(a.right)&lt;br /&gt;
    rotateleft(a)&lt;br /&gt;
  &lt;br /&gt;
Малое правое и большое правое вращение определяются симметрично малому левому и большому левому вращению.&lt;br /&gt;
В каждом случае операция приводит к нужному результату, а полная высота уменьшается не более чем на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и не может увеличиться.&lt;br /&gt;
&lt;br /&gt;
Все операции вращения, очевидно, требуют &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Добавление вершины ===&lt;br /&gt;
Пусть нам надо добавить ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Будем спускаться по дереву, как при поиске ключа &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Если мы стоим в вершине &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и нам надо идти в поддерево, которого нет, то делаем ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; листом, а вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; его корнем. Дальше поднимаемся вверх по пути поиска и пересчитываем баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; увеличивается на единицу, если из правого, то уменьшается на единицу. Если пришли в вершину и её баланс стал равным нулю, то это значит высота поддерева не изменилась и подъём останавливается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит высота поддерева изменилась и подъём продолжается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, то делаем одно из четырёх вращений и, если после вращения баланс стал равным нулю, то останавливаемся, иначе продолжаем подъём.&lt;br /&gt;
&lt;br /&gt;
Так как в процессе добавления вершины мы рассматриваем не более, чем &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; вершин дерева, и для каждой запускаем балансировку не более одного раза, то суммарное количество операций при включении новой вершины в дерево составляет &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Удаление вершины ===&lt;br /&gt;
Для простоты опишем рекурсивный алгоритм удаления.&lt;br /&gt;
Если вершина {{---}} лист, то [[Дерево поиска, наивная реализация#Удаление|удалим]] её, иначе найдём самую близкую по значению вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, переместим её на место удаляемой вершины и [[Дерево поиска, наивная реализация#Удаление|удалим]] вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;. От удалённой вершины будем подниматься вверх к корню и пересчитывать баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; уменьшается на единицу, если из правого, то увеличивается на единицу. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит, что высота этого поддерева не изменилась и подъём можно остановить. Если баланс вершины стал равным нулю, то высота поддерева уменьшилась и подъём нужно продолжить. Если баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, следует выполнить одно из четырёх вращений и, если после вращений баланс вершины стал равным нулю, то подъём продолжается, иначе останавливается.&lt;br /&gt;
&lt;br /&gt;
В результате указанных действий на удаление вершины и балансировку суммарно тратится, как и ранее, &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; операций. Таким образом, требуемое количество действий {{---}} &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Поиск вершины, минимум/максимум в дереве, etc. ===&lt;br /&gt;
Остальные операции не меняют структуры дерева, поэтому выполняются так же, как и в [[Дерево поиска, наивная реализация|наивной реализации]] дерева поиска.&lt;br /&gt;
===Слияние двух AVL-деревьев===&lt;br /&gt;
&lt;br /&gt;
Дано два дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, все ключи в &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h(T_1) \leqslant h(T_2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В дереве &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; удаляем самую правую вершину, назовём её &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Высота дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; может уменьшиться на единицу. В дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; идём от корня всегда в левое поддерево и, когда высота этого поддерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; будет равна высоте дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, делаем новое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корнем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет вершина &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, левым поддеревом будет дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, а правым дерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Теперь в дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; у вершины, в которой мы остановились при спуске, левым поддеревом делаем дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Таким образом, дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; будет результатом слияния двух АВЛ-деревьев.&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; до слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u3.jpg|340px]]&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; после слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
===Алгоритм разделения AVL-дерева на два===&lt;br /&gt;
====Алгоритм первый====&lt;br /&gt;
Пусть у нас есть дерево &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;. Мы должны разбить его на два дерева &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;T_{1} \leqslant x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x &amp;lt; T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что корень нашего дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, в таком случае все левое поддерево вместе с корнем после разделения отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда рекурсивно спускаемся в правое поддерево и там проверяем это условие (так как часть правого поддерева тоже может содержать ключи &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;). Если же корень оказался &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, то мы спускаемся той же рекурсией, но только в левое поддерево и ищем там.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. В таком случае этот корень со своим левым поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Поэтому мы делаем следующее: запоминаем ссылку на правое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, удаляем корень, запоминая его значение (не меняя конфигурацию дерева, то есть просто делаем ссылки на него NULL'ами). Таким образом, мы отделяем сбалансированное АВЛ-дерево (бывшее левое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Делаем новую вершину со значением бывшего корня правым листом самой правой вершины &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Обозначим полученное дерево за &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;. Теперь нам нужно объединить его с уже построенным ранее &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (оно может быть пустым, если мы первый раз нашли такое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Для этого мы ищем в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; самое правое поддерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; высоты, равной высоте &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (спускаясь от корня всегда в правые поддеревья). Делаем новое дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, сливая &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (очевидно, все ключи в &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, поэтому мы можем это сделать). Теперь в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; у отца вершины, в которой мы остановились при поиске дерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, правым поддеревом делаем дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; и запускаем балансировку. После нужно спуститься в правое поддерево бывшего дерева &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (по ссылке, которую мы ранее запомнили) и обработать его.&lt;br /&gt;
&lt;br /&gt;
Если мы пришли в поддерево &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, совершаем аналогичные действия: делаем NULL'ами ссылки на корень &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, запоминая ссылку на его левое поддерево. Делаем новую вершину со значением бывшего корня левым листом самой левой вершины &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; и запускаем балансировку. Объединяем полученное АВЛ-дерево с уже построенным ранее &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; аналогичным первому случаю способом, только теперь мы ищем самое левое поддерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотри пример (рис. 1). Цветом выделены поддеревья, которые после разделения должны отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;x = 76&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL.jpg|thumb|left|525px|Рис. 1. Разделение АВЛ-дерева на два.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Корень дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, поэтому он со всем выделенным поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. По описанному выше алгоритму отделяем это поддерево с корнем и делаем из них сбалансированное АВЛ-дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (рис. 2). Так как это первая ситуация, в которой корень рассматриваемого поддерева был &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; становится &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Далее по сохраненной ссылке спускаемся в правое поддерево. Его корень &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Следовательно, строим из него и его правого поддерева &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и спускаемся в левое поддерево. Снова корень &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Строим новое &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; и объединяем его с уже существующим &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (рис. 3).&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:АВВЛ2.jpg|thumb|left|525px|Рис. 2. Создание T'.]]&lt;br /&gt;
|}&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL3.jpg|thumb|left|1050px|Рис. 3. Объединение T' и T1.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Далее действуем по алгоритму и в итоге получаем (рис. 4):&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:End.jpg|thumb|left|525px|Рис. 4. АВЛ-деревья после разделения.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм имеет сложность &amp;lt;tex&amp;gt;O(\log^{2} n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Алгоритм второй====&lt;br /&gt;
Рассмотрим решение, которое имеет сложность &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вернемся к примеру (рис. 1). Теперь рекурсивно спустимся вниз и оттуда будем строить деревья &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;, передавая наверх корректные АВЛ-деревья. То есть для рис. 1 первым в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; придет вершина &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt; с левым поддеревом (выделено светло-зеленым цветом), так как это корректное АВЛ-дерево, оно же и вернется из рекурсии. Далее мы попадем в вершину со значением &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt; и должны слить ее и ее левое поддерево (выделено светло-синим) с тем, что нам пришло. И сделать это нужно так, чтобы передать наверх корректное АВЛ-дерево. Будем действовать по такому алгоритму, пока не дойдем до вершины.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; с корнем &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Тогда сольем его с уже построенным на тот момент &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; пришло снизу, а значит по условию рекурсии это корректное АВЛ-дерево, &amp;lt;tex&amp;gt;S \leqslant T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;h(T_{1}) \leqslant h(S)&amp;lt;/tex&amp;gt;). Но так как обычная процедура слияния сливает два АВЛ-дерева, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не является корректным АВЛ-деревом, мы немного ее изменим. Пусть мы в дереве &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; нашли самое правое поддерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, высота которого равна высоте &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда сделаем новое дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, корнем которого будет вершина &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (без нее это дерево является сбалансированным), правым поддеревом {{---}} &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, левым {{---}} &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. И подвесим &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; на то место, где мы остановились при поиске &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. Запустим балансировку. В случае, когда корень поддерева, в которое мы пришли, &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, все аналогично.&lt;br /&gt;
&lt;br /&gt;
Разберем пример на рис. 1. Пусть мы рекурсивно спустились до узла &amp;lt;tex&amp;gt;77&amp;lt;/tex&amp;gt;. Ключ больше &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, поэтому эта вершина станет деревом &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и передастся наверх. Теперь мы поднялись в узел &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом станет деревом &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и мы снова поднимемся наверх в узел &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом снова должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, и так как теперь дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; уже не пустое, то их надо слить. После слияния по описанному выше алгоритму получим (рис. 5)&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex.jpg|thumb|left|525px|Рис. 5.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
После мы поднимемся в вершину с ключом &amp;lt;tex&amp;gt;80&amp;lt;/tex&amp;gt;. Она с правым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; (рис. 6). &lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex2am.jpg|thumb|left|525px|Рис. 6.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
И на последней итерации мы поднимемся в корень дерева с ключом &amp;lt;tex&amp;gt;50&amp;lt;/tex&amp;gt;, он с левым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, после чего алгоритм завершится.&lt;br /&gt;
&lt;br /&gt;
Пусть поддеревьев с ключами &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt; оказалось больше, чем поддеревьев с ключами &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Докажем для них логарифмическую асимптотику. Дерево на последнем уровне имеет высоту &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; (она может быть не равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, если мы придём в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;). Его мы передаем наверх и вставляем в поддерево высотой &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;H_{k} \leqslant H_{k-1}&amp;lt;/tex&amp;gt;, так как разница высот поддеревьев у любой вершины не больше &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, и мы при переходе от &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt; поднимаемся как минимум на одну вершину вверх. Слияние этих поддеревьев мы выполним за &amp;lt;tex&amp;gt;H_{k-1} - H_{k}&amp;lt;/tex&amp;gt;, получим в итоге дерево высоты не большей, чем &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. Его мы передадим наверх, поэтому в следующий раз слияние будет выполнено за &amp;lt;tex&amp;gt;H_{k-2} - H_{k - 1}&amp;lt;/tex&amp;gt; и так далее. Таким образом мы получим &amp;lt;tex&amp;gt;(H - H_{1}) + (H_{1} - H_{2}) + (H_{2} - H_{3}) + \cdots +  (H_{k - 1} - H_{k}) = H - H_{k} = O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итоговая асимптотика алгоритма {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://habrahabr.ru/post/150732/ Habrahabr {{---}} АВЛ-деревья]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/АВЛ-дерево Википедия {{---}} АВЛ-дерево]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;br /&gt;
[[Категория:Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47645</id>
		<title>АВЛ-дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=47645"/>
				<updated>2015-06-05T18:07:04Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Балансировка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''АВЛ-дерево''' (англ. ''AVL-Tree'') {{---}} сбалансированное [[Дерево поиска, наивная реализация|двоичное дерево поиска]], в котором поддерживается следующее свойство: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.&lt;br /&gt;
&lt;br /&gt;
АВЛ-деревья названы по первым буквам фамилий их изобретателей, Г. М. Адельсона-Вельского и Е. М. Ландиса, которые впервые предложили использовать АВЛ-деревья в 1962 году.&lt;br /&gt;
&lt;br /&gt;
== Высота дерева ==&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=АВЛ-дерево с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ключами имеет высоту &amp;lt;tex&amp;gt;h = O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
||proof=&lt;br /&gt;
&lt;br /&gt;
Высоту поддерева с корнем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; будем обозначать как &amp;lt;tex&amp;gt;h(x)&amp;lt;/tex&amp;gt;, высоту поддерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} как &amp;lt;tex&amp;gt;h(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt;, где            &amp;lt;tex&amp;gt;F_h - h&amp;lt;/tex&amp;gt;-ое число Фибоначчи.  &lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;. Тогда, как легко видеть, &amp;lt;tex&amp;gt;m_{h+2} = m_{h+1} + m_h + 1&amp;lt;/tex&amp;gt;. Равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; докажем по индукции. &lt;br /&gt;
&lt;br /&gt;
База индукции &amp;lt;tex&amp;gt;m_1 = F_3 - 1&amp;lt;/tex&amp;gt; {{---}} верно, &amp;lt;tex&amp;gt;m_1 = 1, F_3 = 2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Допустим &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} верно. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;m_{h+1} = m_h + m_{h-1} + 1 = F_{h+2} - 1 + F_{h+1} - 1 + 1 = F_{h+3} - 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} доказано.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_h = \Omega(\varphi^h)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\varphi = \dfrac{ \sqrt{5}+1}{2}&amp;lt;/tex&amp;gt;. То есть&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \varphi^{h}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логарифмируя по основанию &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\log_{\varphi}n \geqslant h&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,  получаем, что высота AVL-дерева из n вершин {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Балансировка ==&lt;br /&gt;
'''Балансировкой вершины''' называется операция, которая в случае разницы высот левого и правого поддеревьев &amp;lt;tex&amp;gt;|h(L) - h(R)| = 2&amp;lt;/tex&amp;gt;, изменяет связи предок-потомок в поддереве данной вершины так, чтобы восстановилось свойство дерева &amp;lt;tex&amp;gt;|h(L) - h(R)| \leqslant 1&amp;lt;/tex&amp;gt;, иначе ничего не меняет.&lt;br /&gt;
Для балансировки будем хранить для каждой вершины разницу между высотой её левого и правого поддерева &amp;lt;tex&amp;gt;diff[i] = h(L) - h(R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для балансировки вершины используются один из 4 типов вращений:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
 !Тип вращения&lt;br /&gt;
 !Иллюстрация&lt;br /&gt;
 !Когда используется&lt;br /&gt;
 !Расстановка балансов&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Малое левое вращение'''&lt;br /&gt;
 |  [[Файл:avl_u1.jpg|2000x200px]]  &lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Большое левое вращение'''&lt;br /&gt;
 | [[Файл:avl_u2.jpg|2000x200px]]&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
Малый левый поворот:&lt;br /&gt;
  '''function''' rotateleft(Node a):&lt;br /&gt;
    node b = a.right&lt;br /&gt;
    a.right = b.left&lt;br /&gt;
    b.left = a&lt;br /&gt;
    fixheight(a)&lt;br /&gt;
    fixheight(b)&lt;br /&gt;
&lt;br /&gt;
Большой правый поворот пишется проще:&lt;br /&gt;
  '''function''' bigrotateleft(node a):&lt;br /&gt;
    rotateright(a.right)&lt;br /&gt;
    rotateleft(a)&lt;br /&gt;
  &lt;br /&gt;
Малое правое и большое правое вращение определяются симметрично малому левому и большому левому вращению.&lt;br /&gt;
В каждом случае операция приводит к нужному результату, а полная высота уменьшается не более чем на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и не может увеличиться.&lt;br /&gt;
&lt;br /&gt;
Все операции вращения, очевидно, требуют &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Добавление вершины ===&lt;br /&gt;
Пусть нам надо добавить ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Будем спускаться по дереву, как при поиске ключа &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Если мы стоим в вершине &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и нам надо идти в поддерево, которого нет, то делаем ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; листом, а вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; его корнем. Дальше поднимаемся вверх по пути поиска и пересчитываем баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; увеличивается на единицу, если из правого, то уменьшается на единицу. Если пришли в вершину и её баланс стал равным нулю, то это значит высота поддерева не изменилась и подъём останавливается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит высота поддерева изменилась и подъём продолжается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, то делаем одно из четырёх вращений и, если после вращения баланс стал равным нулю, то останавливаемся, иначе продолжаем подъём.&lt;br /&gt;
&lt;br /&gt;
Так как в процессе добавления вершины мы рассматриваем не более, чем &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; вершин дерева, и для каждой запускаем балансировку не более одного раза, то суммарное количество операций при включении новой вершины в дерево составляет &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Удаление вершины ===&lt;br /&gt;
Для простоты опишем рекурсивный алгоритм удаления.&lt;br /&gt;
Если вершина {{---}} лист, то [[Дерево поиска, наивная реализация#Удаление|удалим]] её, иначе найдём самую близкую по значению вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, переместим её на место удаляемой вершины и [[Дерево поиска, наивная реализация#Удаление|удалим]] вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;. От удалённой вершины будем подниматься вверх к корню и пересчитывать баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; уменьшается на единицу, если из правого, то увеличивается на единицу. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит, что высота этого поддерева не изменилась и подъём можно остановить. Если баланс вершины стал равным нулю, то высота поддерева уменьшилась и подъём нужно продолжить. Если баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, следует выполнить одно из четырёх вращений и, если после вращений баланс вершины стал равным нулю, то подъём продолжается, иначе останавливается.&lt;br /&gt;
&lt;br /&gt;
В результате указанных действий на удаление вершины и балансировку суммарно тратится, как и ранее, &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; операций. Таким образом, требуемое количество действий {{---}} &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Поиск вершины, минимум/максимум в дереве, etc. ===&lt;br /&gt;
Остальные операции не меняют структуры дерева, поэтому выполняются так же, как и в [[Дерево поиска, наивная реализация|наивной реализации]] дерева поиска.&lt;br /&gt;
===Слияние двух AVL-деревьев===&lt;br /&gt;
&lt;br /&gt;
Дано два дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, все ключи в &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h(T_1) \leqslant h(T_2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В дереве &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; удаляем самую правую вершину, назовём её &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Высота дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; может уменьшиться на единицу. В дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; идём от корня всегда в левое поддерево и, когда высота этого поддерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; будет равна высоте дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, делаем новое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корнем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет вершина &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, левым поддеревом будет дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, а правым дерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Теперь в дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; у вершины, в которой мы остановились при спуске, левым поддеревом делаем дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Таким образом, дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; будет результатом слияния двух АВЛ-деревьев.&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; до слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u3.jpg|340px]]&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; после слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
===Алгоритм разделения AVL-дерева на два===&lt;br /&gt;
====Алгоритм первый====&lt;br /&gt;
Пусть у нас есть дерево &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;. Мы должны разбить его на два дерева &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;T_{1} \leqslant x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x &amp;lt; T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что корень нашего дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, в таком случае все левое поддерево вместе с корнем после разделения отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда рекурсивно спускаемся в правое поддерево и там проверяем это условие (так как часть правого поддерева тоже может содержать ключи &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;). Если же корень оказался &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, то мы спускаемся той же рекурсией, но только в левое поддерево и ищем там.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. В таком случае этот корень со своим левым поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Поэтому мы делаем следующее: запоминаем ссылку на правое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, удаляем корень, запоминая его значение (не меняя конфигурацию дерева, то есть просто делаем ссылки на него NULL'ами). Таким образом, мы отделяем сбалансированное АВЛ-дерево (бывшее левое поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Делаем новую вершину со значением бывшего корня правым листом самой правой вершины &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Обозначим полученное дерево за &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;. Теперь нам нужно объединить его с уже построенным ранее &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (оно может быть пустым, если мы первый раз нашли такое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;). Для этого мы ищем в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; самое правое поддерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; высоты, равной высоте &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (спускаясь от корня всегда в правые поддеревья). Делаем новое дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, сливая &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (очевидно, все ключи в &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, поэтому мы можем это сделать). Теперь в дереве &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; у отца вершины, в которой мы остановились при поиске дерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, правым поддеревом делаем дерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; и запускаем балансировку. После нужно спуститься в правое поддерево бывшего дерева &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (по ссылке, которую мы ранее запомнили) и обработать его.&lt;br /&gt;
&lt;br /&gt;
Если мы пришли в поддерево &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, корень которого &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, совершаем аналогичные действия: делаем NULL'ами ссылки на корень &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;, запоминая ссылку на его левое поддерево. Делаем новую вершину со значением бывшего корня левым листом самой левой вершины &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; и запускаем балансировку. Объединяем полученное АВЛ-дерево с уже построенным ранее &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; аналогичным первому случаю способом, только теперь мы ищем самое левое поддерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотри пример (рис. 1). Цветом выделены поддеревья, которые после разделения должны отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;x = 76&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL.jpg|thumb|left|525px|Рис. 1. Разделение АВЛ-дерева на два.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Корень дерева &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, поэтому он со всем выделенным поддеревом должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. По описанному выше алгоритму отделяем это поддерево с корнем и делаем из них сбалансированное АВЛ-дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; (рис. 2). Так как это первая ситуация, в которой корень рассматриваемого поддерева был &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; становится &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Далее по сохраненной ссылке спускаемся в правое поддерево. Его корень &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Следовательно, строим из него и его правого поддерева &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и спускаемся в левое поддерево. Снова корень &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Строим новое &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; и объединяем его с уже существующим &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (рис. 3).&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:АВВЛ2.jpg|thumb|left|525px|Рис. 2. Создание T'.]]&lt;br /&gt;
|}&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:AVL3.jpg|thumb|left|1050px|Рис. 3. Объединение T' и T1.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Далее действуем по алгоритму и в итоге получаем (рис. 4):&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:End.jpg|thumb|left|525px|Рис. 4. АВЛ-деревья после разделения.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм имеет сложность &amp;lt;tex&amp;gt;O(\log^{2} n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Алгоритм второй====&lt;br /&gt;
Рассмотрим решение, которое имеет сложность &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вернемся к примеру (рис. 1). Теперь рекурсивно спустимся вниз и оттуда будем строить деревья &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt;, передавая наверх корректные АВЛ-деревья. То есть для рис. 1 первым в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; придет вершина &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt; с левым поддеревом (выделено светло-зеленым цветом), так как это корректное АВЛ-дерево, оно же и вернется из рекурсии. Далее мы попадем в вершину со значением &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt; и должны слить ее и ее левое поддерево (выделено светло-синим) с тем, что нам пришло. И сделать это нужно так, чтобы передать наверх корректное АВЛ-дерево. Будем действовать по такому алгоритму, пока не дойдем до вершины.&lt;br /&gt;
&lt;br /&gt;
Пусть мы пришли в поддерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; с корнем &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt;. Тогда сольем его с уже построенным на тот момент &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; пришло снизу, а значит по условию рекурсии это корректное АВЛ-дерево, &amp;lt;tex&amp;gt;S \leqslant T_{1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;h(T_{1}) \leqslant h(S)&amp;lt;/tex&amp;gt;). Но так как обычная процедура слияния сливает два АВЛ-дерева, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не является корректным АВЛ-деревом, мы немного ее изменим. Пусть мы в дереве &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; нашли самое правое поддерево &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, высота которого равна высоте &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;. Тогда сделаем новое дерево &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt;, корнем которого будет вершина &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; (без нее это дерево является сбалансированным), правым поддеревом {{---}} &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, левым {{---}} &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. И подвесим &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; на то место, где мы остановились при поиске &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. Запустим балансировку. В случае, когда корень поддерева, в которое мы пришли, &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;, все аналогично.&lt;br /&gt;
&lt;br /&gt;
Разберем пример на рис. 1. Пусть мы рекурсивно спустились до узла &amp;lt;tex&amp;gt;77&amp;lt;/tex&amp;gt;. Ключ больше &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, поэтому эта вершина станет деревом &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; и передастся наверх. Теперь мы поднялись в узел &amp;lt;tex&amp;gt;75&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом станет деревом &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; и мы снова поднимемся наверх в узел &amp;lt;tex&amp;gt;70&amp;lt;/tex&amp;gt;. Он со своим левым поддеревом снова должен отойти в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, и так как теперь дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt; уже не пустое, то их надо слить. После слияния по описанному выше алгоритму получим (рис. 5)&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex.jpg|thumb|left|525px|Рис. 5.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
После мы поднимемся в вершину с ключом &amp;lt;tex&amp;gt;80&amp;lt;/tex&amp;gt;. Она с правым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{2}&amp;lt;/tex&amp;gt; (рис. 6). &lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| || [[Файл:Ex2am.jpg|thumb|left|525px|Рис. 6.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
И на последней итерации мы поднимемся в корень дерева с ключом &amp;lt;tex&amp;gt;50&amp;lt;/tex&amp;gt;, он с левым поддеревом отойдет в дерево &amp;lt;tex&amp;gt;T_{1}&amp;lt;/tex&amp;gt;, после чего алгоритм завершится.&lt;br /&gt;
&lt;br /&gt;
Пусть поддеревьев с ключами &amp;lt;tex&amp;gt;\leqslant x&amp;lt;/tex&amp;gt; оказалось больше, чем поддеревьев с ключами &amp;lt;tex&amp;gt;&amp;gt; x&amp;lt;/tex&amp;gt;. Докажем для них логарифмическую асимптотику. Дерево на последнем уровне имеет высоту &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; (она может быть не равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, если мы придём в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;). Его мы передаем наверх и вставляем в поддерево высотой &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;H_{k} \leqslant H_{k-1}&amp;lt;/tex&amp;gt;, так как разница высот поддеревьев у любой вершины не больше &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, и мы при переходе от &amp;lt;tex&amp;gt;H_{k}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt; поднимаемся как минимум на одну вершину вверх. Слияние этих поддеревьев мы выполним за &amp;lt;tex&amp;gt;H_{k-1} - H_{k}&amp;lt;/tex&amp;gt;, получим в итоге дерево высоты не большей, чем &amp;lt;tex&amp;gt;H_{k-1}&amp;lt;/tex&amp;gt;. Его мы передадим наверх, поэтому в следующий раз слияние будет выполнено за &amp;lt;tex&amp;gt;H_{k-2} - H_{k - 1}&amp;lt;/tex&amp;gt; и так далее. Таким образом мы получим &amp;lt;tex&amp;gt;(H - H_{1}) + (H_{1} - H_{2}) + (H_{2} - H_{3}) + \cdots +  (H_{k - 1} - H_{k}) = H - H_{k} = O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итоговая асимптотика алгоритма {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://habrahabr.ru/post/150732/ Habrahabr {{---}} АВЛ-деревья]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/АВЛ-дерево Википедия {{---}} АВЛ-дерево]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;br /&gt;
[[Категория:Структуры данных]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u2.jpg&amp;diff=47642</id>
		<title>Файл:Avl u2.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u2.jpg&amp;diff=47642"/>
				<updated>2015-06-05T17:59:25Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: загружена новая версия «Файл:Avl u2.jpg»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u1.jpg&amp;diff=47640</id>
		<title>Файл:Avl u1.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u1.jpg&amp;diff=47640"/>
				<updated>2015-06-05T17:44:17Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: загружена новая версия «Файл:Avl u1.jpg»: Возврат к версии от 17:41, 5 июня 2015&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u1.jpg&amp;diff=47639</id>
		<title>Файл:Avl u1.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u1.jpg&amp;diff=47639"/>
				<updated>2015-06-05T17:43:26Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: загружена новая версия «Файл:Avl u1.jpg»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u1.jpg&amp;diff=47638</id>
		<title>Файл:Avl u1.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Avl_u1.jpg&amp;diff=47638"/>
				<updated>2015-06-05T17:41:58Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: загружена новая версия «Файл:Avl u1.jpg»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=46171</id>
		<title>АВЛ-дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=46171"/>
				<updated>2015-05-10T05:54:19Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: /* Балансировка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''АВЛ-дерево''' (''AVL-Tree'') {{---}} сбалансированное [[Дерево поиска, наивная реализация|двоичное дерево поиска]], в котором поддерживается следующее свойство: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.&lt;br /&gt;
&lt;br /&gt;
АВЛ-деревья названы по первым буквам фамилий их изобретателей, Г. М. Адельсона-Вельского и Е. М. Ландиса, которые впервые предложили использовать АВЛ-деревья в 1962 году.&lt;br /&gt;
&lt;br /&gt;
== Высота дерева ==&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=АВЛ-дерево с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ключами имеет высоту &amp;lt;tex&amp;gt;h = O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
||proof=&lt;br /&gt;
&lt;br /&gt;
Высоту поддерева с корнем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; будем обозначать как &amp;lt;tex&amp;gt;h(x)&amp;lt;/tex&amp;gt;, высоту поддерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} как &amp;lt;tex&amp;gt;h(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt;, где            &amp;lt;tex&amp;gt;F_h - h&amp;lt;/tex&amp;gt;-ое число Фибоначчи.  &lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;. Тогда, как легко видеть, &amp;lt;tex&amp;gt;m_{h+2} = m_{h+1} + m_h + 1&amp;lt;/tex&amp;gt;. Равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; докажем по индукции. &lt;br /&gt;
&lt;br /&gt;
База индукции &amp;lt;tex&amp;gt;m_1 = F_3 - 1&amp;lt;/tex&amp;gt; {{---}} верно, &amp;lt;tex&amp;gt;m_1 = 1, F_3 = 2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Допустим &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} верно. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;m_{h+1} = m_h + m_{h-1} + 1 = F_{h+2} - 1 + F_{h+1} - 1 + 1 = F_{h+3} - 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} доказано.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_h = \Omega(\varphi^h)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\varphi = \frac{ \sqrt{5}+1}{2}&amp;lt;/tex&amp;gt;. То есть&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \varphi^{h}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логарифмируя по основанию &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\log_{\varphi}n \geqslant h&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,  получаем, что высота AVL-дерева из n вершин {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Балансировка ==&lt;br /&gt;
'''Балансировкой вершины''' называется операция, которая в случае разницы высот левого и правого поддеревьев &amp;lt;tex&amp;gt;|h(L) - h(R)| = 2&amp;lt;/tex&amp;gt;, изменяет связи предок-потомок в поддереве данной вершины так, чтобы восстановилось свойство дерева &amp;lt;tex&amp;gt;|h(L) - h(R)| \leqslant 1&amp;lt;/tex&amp;gt;, иначе ничего не меняет.&lt;br /&gt;
Для балансировки будем хранить для каждой вершины разницу между высотой её левого и правого поддерева &amp;lt;tex&amp;gt;diff[i] = h(L) - h(R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для балансировки вершины используются один из 4 типов вращений:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
 !Тип вращения&lt;br /&gt;
 !Иллюстрация&lt;br /&gt;
 !Когда используется&lt;br /&gt;
 !Расстановка балансов&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Малое левое вращение''' (''Small left rotation'')&lt;br /&gt;
 |  [[Файл:avl_u1.jpg|2000x200px]]  &lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Большое левое вращение''' (Big left rotation'')&lt;br /&gt;
 | [[Файл:avl_u2.jpg|2000x200px]]&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
Малое правое и большое правое вращение определяются симметрично малому левому и большому левому вращению.&lt;br /&gt;
В каждом случае операция приводит к нужному результату, а полная высота уменьшается не более чем на 1 и не может увеличиться.&lt;br /&gt;
&lt;br /&gt;
Все операции вращения, очевидно, требуют &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Добавление вершины ===&lt;br /&gt;
Пусть нам надо добавить ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Будем спускаться по дереву, как при поиске ключа &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Если мы стоим в вершине &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и нам надо идти в поддерево, которого нет, то делаем ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; листом, а вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; его корнем. Дальше поднимаемся вверх по пути поиска и пересчитываем баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; увеличивается на единицу, если из правого, то уменьшается на единицу. Если пришли в вершину и её баланс стал равным нулю, то это значит высота поддерева не изменилась и подъём останавливается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит высота поддерева изменилась и подъём продолжается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, то делаем одно из четырёх вращений и, если после вращения баланс стал равным нулю, то останавливаемся, иначе продолжаем подъём.&lt;br /&gt;
&lt;br /&gt;
Так как в процессе добавления вершины мы рассматриваем не более, чем &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; вершин дерева, и для каждой запускаем балансировку не более одного раза, то суммарное количество операций при включении новой вершины в дерево составляет &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Удаление вершины ===&lt;br /&gt;
Для простоты опишем рекурсивный алгоритм удаления.&lt;br /&gt;
Если вершина - лист, то [[Дерево поиска, наивная реализация#Удаление|удалим]] её, иначе найдём самую близкую по значению вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, переместим её на место удаляемой вершины и [[Дерево поиска, наивная реализация#Удаление|удалим]] вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;. От удалённой вершины будем подниматься вверх к корню и пересчитывать баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; уменьшается на единицу, если из правого, то увеличивается на единицу. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит, что высота этого поддерева не изменилась и подъём можно остановить. Если баланс вершины стал равным нулю, то высота поддерева уменьшилась и подъём нужно продолжить. Если баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, следует выполнить одно из четырёх вращений и, если после вращений баланс вершины стал равным нулю, то подъём продолжается, иначе останавливается.&lt;br /&gt;
&lt;br /&gt;
В результате указанных действий на удаление вершины и балансировку суммарно тратится, как и ранее, &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; операций. Таким образом, требуемое количество действий {{---}} &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Поиск вершины, минимум/максимум в дереве, etc. ===&lt;br /&gt;
Остальные операции не меняют структуры дерева, поэтому выполняются так же, как и в [[Дерево поиска, наивная реализация|наивной реализации]] дерева поиска.&lt;br /&gt;
===Слияние двух AVL-деревьев===&lt;br /&gt;
&lt;br /&gt;
Дано два дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, все ключи в &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h(T_1) \leqslant h(T_2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В дереве &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; удаляем самую правую вершину, назовём её &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Высота дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; может уменьшиться на единицу. В дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; идём от корня всегда в левое поддерево и, когда высота этого поддерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; будет равна высоте дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, делаем новое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корнем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет вершина &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, левым поддеревом будет дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, а правым дерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Теперь в дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; у вершины, в которой мы остановились при спуске, левым поддеревом делаем дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Таким образом, дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; будет результатом слияния двух АВЛ-деревьев.&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; до слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u3.jpg|340px]]&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; после слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://habrahabr.ru/post/150732/ Habrahabr {{---}} АВЛ-деревья]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/АВЛ-дерево Википедия {{---}} АВЛ-дерево]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=46170</id>
		<title>АВЛ-дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=46170"/>
				<updated>2015-05-10T05:53:41Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''АВЛ-дерево''' (''AVL-Tree'') {{---}} сбалансированное [[Дерево поиска, наивная реализация|двоичное дерево поиска]], в котором поддерживается следующее свойство: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.&lt;br /&gt;
&lt;br /&gt;
АВЛ-деревья названы по первым буквам фамилий их изобретателей, Г. М. Адельсона-Вельского и Е. М. Ландиса, которые впервые предложили использовать АВЛ-деревья в 1962 году.&lt;br /&gt;
&lt;br /&gt;
== Высота дерева ==&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=АВЛ-дерево с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ключами имеет высоту &amp;lt;tex&amp;gt;h = O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
||proof=&lt;br /&gt;
&lt;br /&gt;
Высоту поддерева с корнем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; будем обозначать как &amp;lt;tex&amp;gt;h(x)&amp;lt;/tex&amp;gt;, высоту поддерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} как &amp;lt;tex&amp;gt;h(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt;, где            &amp;lt;tex&amp;gt;F_h - h&amp;lt;/tex&amp;gt;-ое число Фибоначчи.  &lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;. Тогда, как легко видеть, &amp;lt;tex&amp;gt;m_{h+2} = m_{h+1} + m_h + 1&amp;lt;/tex&amp;gt;. Равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; докажем по индукции. &lt;br /&gt;
&lt;br /&gt;
База индукции &amp;lt;tex&amp;gt;m_1 = F_3 - 1&amp;lt;/tex&amp;gt; {{---}} верно, &amp;lt;tex&amp;gt;m_1 = 1, F_3 = 2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Допустим &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} верно. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;m_{h+1} = m_h + m_{h-1} + 1 = F_{h+2} - 1 + F_{h+1} - 1 + 1 = F_{h+3} - 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} доказано.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_h = \Omega(\varphi^h)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\varphi = \frac{ \sqrt{5}+1}{2}&amp;lt;/tex&amp;gt;. То есть&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \varphi^{h}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логарифмируя по основанию &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\log_{\varphi}n \geqslant h&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,  получаем, что высота AVL-дерева из n вершин {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Балансировка ==&lt;br /&gt;
'''Балансировкой вершины''' ('' называется операция, которая в случае разницы высот левого и правого поддеревьев &amp;lt;tex&amp;gt;|h(L) - h(R)| = 2&amp;lt;/tex&amp;gt;, изменяет связи предок-потомок в поддереве данной вершины так, чтобы восстановилось свойство дерева &amp;lt;tex&amp;gt;|h(L) - h(R)| \leqslant 1&amp;lt;/tex&amp;gt;, иначе ничего не меняет.&lt;br /&gt;
Для балансировки будем хранить для каждой вершины разницу между высотой её левого и правого поддерева &amp;lt;tex&amp;gt;diff[i] = h(L) - h(R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для балансировки вершины используются один из 4 типов вращений:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
 !Тип вращения&lt;br /&gt;
 !Иллюстрация&lt;br /&gt;
 !Когда используется&lt;br /&gt;
 !Расстановка балансов&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Малое левое вращение''' (''Small left rotation'')&lt;br /&gt;
 |  [[Файл:avl_u1.jpg|2000x200px]]  &lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Большое левое вращение''' (Big left rotation'')&lt;br /&gt;
 | [[Файл:avl_u2.jpg|2000x200px]]&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
Малое правое и большое правое вращение определяются симметрично малому левому и большому левому вращению.&lt;br /&gt;
В каждом случае операция приводит к нужному результату, а полная высота уменьшается не более чем на 1 и не может увеличиться.&lt;br /&gt;
&lt;br /&gt;
Все операции вращения, очевидно, требуют &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Добавление вершины ===&lt;br /&gt;
Пусть нам надо добавить ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Будем спускаться по дереву, как при поиске ключа &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Если мы стоим в вершине &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и нам надо идти в поддерево, которого нет, то делаем ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; листом, а вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; его корнем. Дальше поднимаемся вверх по пути поиска и пересчитываем баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; увеличивается на единицу, если из правого, то уменьшается на единицу. Если пришли в вершину и её баланс стал равным нулю, то это значит высота поддерева не изменилась и подъём останавливается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит высота поддерева изменилась и подъём продолжается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, то делаем одно из четырёх вращений и, если после вращения баланс стал равным нулю, то останавливаемся, иначе продолжаем подъём.&lt;br /&gt;
&lt;br /&gt;
Так как в процессе добавления вершины мы рассматриваем не более, чем &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; вершин дерева, и для каждой запускаем балансировку не более одного раза, то суммарное количество операций при включении новой вершины в дерево составляет &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Удаление вершины ===&lt;br /&gt;
Для простоты опишем рекурсивный алгоритм удаления.&lt;br /&gt;
Если вершина - лист, то [[Дерево поиска, наивная реализация#Удаление|удалим]] её, иначе найдём самую близкую по значению вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, переместим её на место удаляемой вершины и [[Дерево поиска, наивная реализация#Удаление|удалим]] вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;. От удалённой вершины будем подниматься вверх к корню и пересчитывать баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; уменьшается на единицу, если из правого, то увеличивается на единицу. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит, что высота этого поддерева не изменилась и подъём можно остановить. Если баланс вершины стал равным нулю, то высота поддерева уменьшилась и подъём нужно продолжить. Если баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, следует выполнить одно из четырёх вращений и, если после вращений баланс вершины стал равным нулю, то подъём продолжается, иначе останавливается.&lt;br /&gt;
&lt;br /&gt;
В результате указанных действий на удаление вершины и балансировку суммарно тратится, как и ранее, &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; операций. Таким образом, требуемое количество действий {{---}} &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Поиск вершины, минимум/максимум в дереве, etc. ===&lt;br /&gt;
Остальные операции не меняют структуры дерева, поэтому выполняются так же, как и в [[Дерево поиска, наивная реализация|наивной реализации]] дерева поиска.&lt;br /&gt;
===Слияние двух AVL-деревьев===&lt;br /&gt;
&lt;br /&gt;
Дано два дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, все ключи в &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h(T_1) \leqslant h(T_2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В дереве &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; удаляем самую правую вершину, назовём её &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Высота дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; может уменьшиться на единицу. В дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; идём от корня всегда в левое поддерево и, когда высота этого поддерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; будет равна высоте дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, делаем новое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корнем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет вершина &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, левым поддеревом будет дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, а правым дерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Теперь в дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; у вершины, в которой мы остановились при спуске, левым поддеревом делаем дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Таким образом, дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; будет результатом слияния двух АВЛ-деревьев.&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; до слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u3.jpg|340px]]&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; после слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://habrahabr.ru/post/150732/ Habrahabr {{---}} АВЛ-деревья]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/АВЛ-дерево Википедия {{---}} АВЛ-дерево]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=46169</id>
		<title>АВЛ-дерево</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%92%D0%9B-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE&amp;diff=46169"/>
				<updated>2015-05-10T05:46:15Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''АВЛ-дерево''' {{---}} сбалансированное [[Дерево поиска, наивная реализация|двоичное дерево поиска]], в котором поддерживается следующее свойство: для каждой его вершины высота её двух поддеревьев различается не более чем на 1.&lt;br /&gt;
&lt;br /&gt;
АВЛ-деревья названы по первым буквам фамилий их изобретателей, Г. М. Адельсона-Вельского и Е. М. Ландиса, которые впервые предложили использовать АВЛ-деревья в 1962 году.&lt;br /&gt;
&lt;br /&gt;
== Высота дерева ==&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=АВЛ-дерево с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; ключами имеет высоту &amp;lt;tex&amp;gt;h = O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
||proof=&lt;br /&gt;
&lt;br /&gt;
Высоту поддерева с корнем &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; будем обозначать как &amp;lt;tex&amp;gt;h(x)&amp;lt;/tex&amp;gt;, высоту поддерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} как &amp;lt;tex&amp;gt;h(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt;, где            &amp;lt;tex&amp;gt;F_h - h&amp;lt;/tex&amp;gt;-ое число Фибоначчи.  &lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;m_h&amp;lt;/tex&amp;gt; {{---}} минимальное число вершин в AVL-дереве высоты &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;. Тогда, как легко видеть, &amp;lt;tex&amp;gt;m_{h+2} = m_{h+1} + m_h + 1&amp;lt;/tex&amp;gt;. Равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; докажем по индукции. &lt;br /&gt;
&lt;br /&gt;
База индукции &amp;lt;tex&amp;gt;m_1 = F_3 - 1&amp;lt;/tex&amp;gt; {{---}} верно, &amp;lt;tex&amp;gt;m_1 = 1, F_3 = 2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Допустим &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} верно. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;m_{h+1} = m_h + m_{h-1} + 1 = F_{h+2} - 1 + F_{h+1} - 1 + 1 = F_{h+3} - 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Таким образом, равенство &amp;lt;tex&amp;gt;m_h = F_{h+2} - 1&amp;lt;/tex&amp;gt; {{---}} доказано.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_h = \Omega(\varphi^h)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\varphi = \frac{ \sqrt{5}+1}{2}&amp;lt;/tex&amp;gt;. То есть&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \varphi^{h}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логарифмируя по основанию &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\log_{\varphi}n \geqslant h&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,  получаем, что высота AVL-дерева из n вершин {{---}} &amp;lt;tex&amp;gt;O(\log{n})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Балансировка ==&lt;br /&gt;
'''Балансировкой вершины''' называется операция, которая в случае разницы высот левого и правого поддеревьев &amp;lt;tex&amp;gt;|h(L) - h(R)| = 2&amp;lt;/tex&amp;gt;, изменяет связи предок-потомок в поддереве данной вершины так, чтобы восстановилось свойство дерева &amp;lt;tex&amp;gt;|h(L) - h(R)| \leqslant 1&amp;lt;/tex&amp;gt;, иначе ничего не меняет.&lt;br /&gt;
Для балансировки будем хранить для каждой вершины разницу между высотой её левого и правого поддерева &amp;lt;tex&amp;gt;diff[i] = h(L) - h(R)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для балансировки вершины используются один из 4 типов вращений:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
 !Тип вращения&lt;br /&gt;
 !Иллюстрация&lt;br /&gt;
 !Когда используется&lt;br /&gt;
 !Расстановка балансов&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Малое левое вращение'''&lt;br /&gt;
 |  [[Файл:avl_u1.jpg|2000x200px]]  &lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
 |'''Большое левое вращение'''&lt;br /&gt;
 | [[Файл:avl_u2.jpg|2000x200px]]&lt;br /&gt;
 |&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = -2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = -1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;diff[a] = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;diff[b] = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;diff[c] = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
Малое правое и большое правое вращение определяются симметрично малому левому и большому левому вращению.&lt;br /&gt;
В каждом случае операция приводит к нужному результату, а полная высота уменьшается не более чем на 1 и не может увеличиться.&lt;br /&gt;
&lt;br /&gt;
Все операции вращения, очевидно, требуют &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
== Операции ==&lt;br /&gt;
=== Добавление вершины ===&lt;br /&gt;
Пусть нам надо добавить ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Будем спускаться по дереву, как при поиске ключа &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Если мы стоим в вершине &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и нам надо идти в поддерево, которого нет, то делаем ключ &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; листом, а вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; его корнем. Дальше поднимаемся вверх по пути поиска и пересчитываем баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; увеличивается на единицу, если из правого, то уменьшается на единицу. Если пришли в вершину и её баланс стал равным нулю, то это значит высота поддерева не изменилась и подъём останавливается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит высота поддерева изменилась и подъём продолжается. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, то делаем одно из четырёх вращений и, если после вращения баланс стал равным нулю, то останавливаемся, иначе продолжаем подъём.&lt;br /&gt;
&lt;br /&gt;
Так как в процессе добавления вершины мы рассматриваем не более, чем &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; вершин дерева, и для каждой запускаем балансировку не более одного раза, то суммарное количество операций при включении новой вершины в дерево составляет &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
=== Удаление вершины ===&lt;br /&gt;
Для простоты опишем рекурсивный алгоритм удаления.&lt;br /&gt;
Если вершина - лист, то [[Дерево поиска, наивная реализация#Удаление|удалим]] её, иначе найдём самую близкую по значению вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, переместим её на место удаляемой вершины и [[Дерево поиска, наивная реализация#Удаление|удалим]] вершину &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;. От удалённой вершины будем подниматься вверх к корню и пересчитывать баланс у вершин. Если мы поднялись в вершину &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; из левого поддерева, то &amp;lt;tex&amp;gt;diff[i]&amp;lt;/tex&amp;gt; уменьшается на единицу, если из правого, то увеличивается на единицу. Если пришли в вершину и её баланс стал равным &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, то это значит, что высота этого поддерева не изменилась и подъём можно остановить. Если баланс вершины стал равным нулю, то высота поддерева уменьшилась и подъём нужно продолжить. Если баланс стал равным &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-2&amp;lt;/tex&amp;gt;, следует выполнить одно из четырёх вращений и, если после вращений баланс вершины стал равным нулю, то подъём продолжается, иначе останавливается.&lt;br /&gt;
&lt;br /&gt;
В результате указанных действий на удаление вершины и балансировку суммарно тратится, как и ранее, &amp;lt;tex&amp;gt; O(h) &amp;lt;/tex&amp;gt; операций. Таким образом, требуемое количество действий {{---}} &amp;lt;tex&amp;gt; O(\log{n}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Поиск вершины, минимум/максимум в дереве, etc. ===&lt;br /&gt;
Остальные операции не меняют структуры дерева, поэтому выполняются так же, как и в [[Дерево поиска, наивная реализация|наивной реализации]] дерева поиска.&lt;br /&gt;
===Слияние двух AVL-деревьев===&lt;br /&gt;
&lt;br /&gt;
Дано два дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, все ключи в &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; меньше ключей в &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;h(T_1) \leqslant h(T_2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В дереве &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; удаляем самую правую вершину, назовём её &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Высота дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; может уменьшиться на единицу. В дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; идём от корня всегда в левое поддерево и, когда высота этого поддерева &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; будет равна высоте дерева &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, делаем новое дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, корнем &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет вершина &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;, левым поддеревом будет дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt;, а правым дерево &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Теперь в дереве &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; у вершины, в которой мы остановились при спуске, левым поддеревом делаем дерево &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и запускаем балансировку. Таким образом, дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; будет результатом слияния двух АВЛ-деревьев.&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; до слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u3.jpg|340px]]&lt;br /&gt;
&lt;br /&gt;
Дерево &amp;lt;tex&amp;gt;T_2&amp;lt;/tex&amp;gt; после слияния&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:avl_u4.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://habrahabr.ru/post/150732/ Habrahabr {{---}} АВЛ-деревья]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/АВЛ-дерево Википедия {{---}} АВЛ-дерево]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44358</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44358"/>
				<updated>2015-01-12T19:25:06Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (англ.'' sign''), '''порядок''' (англ. ''exponent'') и '''мантиссу''' (англ. ''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; бит и на дробную отводится всегда &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (англ. ''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}001&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}01&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}1&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (англ. ''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах (например в сопроцессоре Intel) long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (англ. ''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1,M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0,M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;&amp;lt;ref&amp;gt;[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2,4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6,0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15,8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21,4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23,8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44,2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97,9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131,0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183,2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520,0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-269{,}21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269{,}21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt; \times&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;lt;tex&amp;gt;\times&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405{,}875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101{,}111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405{,}87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1{,}0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;0{,}1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1{,}000100010101&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\times&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;136{,}65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405{,}875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269{,}21875&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;136{,}65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt; &amp;lt;tex&amp;gt; \times &amp;lt;/tex&amp;gt;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000{,}0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000{,}0101&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1{,}001110000101&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;\times&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt; \times &amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44357</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44357"/>
				<updated>2015-01-12T19:20:31Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (англ.'' sign''), '''порядок''' (англ. ''exponent'') и '''мантиссу''' (англ. ''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; бит и на дробную отводится всегда &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (англ. ''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}001&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}01&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}1&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (англ. ''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах (например в сопроцессоре Intel) long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (англ. ''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1,M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0,M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;&amp;lt;ref&amp;gt;[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2,4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6,0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15,8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21,4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23,8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44,2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97,9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131,0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183,2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520,0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-269{,}21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269{,}21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt; \times&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405{,}875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101{,}111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405{,}87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1{,}0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;0{,}1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1{,}000100010101&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\times&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;136{,}65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405{,}875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269{,}21875&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;136{,}65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000{,}0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000{,}0101&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1{,}001110000101&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;\times&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44356</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44356"/>
				<updated>2015-01-12T19:16:45Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (англ.'' sign''), '''порядок''' (англ. ''exponent'') и '''мантиссу''' (англ. ''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; бит и на дробную отводится всегда &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (англ. ''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}001&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}01&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}1&amp;lt;/tex&amp;gt; \times &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (англ. ''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах (например в сопроцессоре Intel) long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (англ. ''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1,M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0,M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;&amp;lt;ref&amp;gt;[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2,4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6,0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15,8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21,4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23,8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44,2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97,9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131,0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183,2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520,0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;/&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-269{,}21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269{,}21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt; &amp;amp;times;&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405{,}875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101{,}111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405{,}87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1{,}0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;0{,}1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1{,}000100010101&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;&amp;amp;times;&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;136{,}65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405{,}875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269{,}21875&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;136{,}65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000{,}0101&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1{,}001110000101&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;/tex&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;+&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44354</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44354"/>
				<updated>2015-01-12T18:53:10Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (''англ. sign''), '''порядок''' (''англ. exponent'') и '''мантиссу''' (''англ. mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; бит и на дробную отводится всегда &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (''англ. normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}01&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}1&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (''англ. normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах (например в сопроцессоре Intel) long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (''англ. denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1.M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0.M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;&amp;lt;ref&amp;gt;[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15.8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23.8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97.9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520.0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;-100001101,00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;.&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 A = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;000100010101&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; = &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;21875&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;001110000101&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; + &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44347</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44347"/>
				<updated>2015-01-12T18:22:16Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (''англ. sign''), '''порядок''' (''англ. exponent'') и '''мантиссу''' (''англ. mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Так же используется формат хранения чисел с фиксированной точкой, который используется для неточных расчётов. Очевидно, что степень числа не хранится в оперативной памяти, а выделяется место для хранения целого числа. Порядок же задаётся программистом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (''англ. normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0{,}0001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}01&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0{,}1&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (''англ. normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах (например в сопроцессоре Intel) long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (''англ. denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1.M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0.M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;&amp;lt;ref&amp;gt;[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15.8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23.8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97.9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520.0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;-100001101,00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;.&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 A = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;000100010101&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; = &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;21875&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;001110000101&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; + &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44345</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44345"/>
				<updated>2015-01-12T18:03:32Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (''sign''), '''порядок''' (''exponent'') и '''мантиссу''' (''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Так же используется формат хранения чисел с фиксированной точкой, который используется для неточных расчётов. Очевидно, что степень числа не хранится в оперативной памяти, а выделяется место для хранения целого числа. Порядок же задаётся программистом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,01&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,1&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах (например в сопроцессоре Intel) long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1.M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0.M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;&amp;lt;ref&amp;gt;[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15.8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23.8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97.9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520.0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;-100001101,00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;.&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 A = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;000100010101&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; = &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;21875&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;001110000101&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; + &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44343</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44343"/>
				<updated>2015-01-12T17:59:18Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (''sign''), '''порядок''' (''exponent'') и '''мантиссу''' (''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Так же используется формат хранения чисел с фиксированной точкой, который используется для неточных расчётов. Очевидно, что степень числа не хранится в оперативной памяти, а выделяется место для хранения целого числа. Порядок же задаётся программистом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,01&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,1&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки (но присутствует в процессоре Intel). Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1.M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0.M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;&amp;lt;ref&amp;gt;[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15.8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23.8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97.9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520.0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;-100001101,00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;.&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 A = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;000100010101&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; = &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;21875&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;001110000101&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; + &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44341</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44341"/>
				<updated>2015-01-12T17:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (''sign''), '''порядок''' (''exponent'') и '''мантиссу''' (''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;; в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Так же используется формат хранения чисел с фиксированной точкой, который используется для неточных расчётов. Очевидно, что степень числа не хранится в оперативной памяти, а выделяется место для хранения целого числа. Порядок же задаётся программистом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,01&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,1&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки (но присутствует в процессоре Intel). Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1.M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0.M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из [http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15.8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23.8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97.9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520.0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;-100001101,00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;.&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 A = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;000100010101&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; = &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;21875&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;001110000101&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; + &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44340</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44340"/>
				<updated>2015-01-12T17:51:54Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (''sign''), '''порядок''' (''exponent'') и '''мантиссу''' (''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;;&lt;br /&gt;
 в нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Так же используется формат хранения чисел с фиксированной точкой, который используется для неточных расчётов. Очевидно, что степень числа не хранится в оперативной памяти, а выделяется место для хранения целого числа. Порядок же задаётся программистом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,01&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,1&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки (но присутствует в процессоре Intel). Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1.M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0.M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из [http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15.8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23.8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97.9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520.0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;-100001101,00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;.&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 A = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;000100010101&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; = &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;21875&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;001110000101&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; + &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44339</id>
		<title>Представление вещественных чисел</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%87%D0%B8%D1%81%D0%B5%D0%BB&amp;diff=44339"/>
				<updated>2015-01-12T17:50:51Z</updated>
		
		<summary type="html">&lt;p&gt;Паршуков Кирилл: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Вещественные числа обычно представляются в виде чисел с плавающей запятой. Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений, его можно считать аналогом экспоненциальной записи чисел, но только в памяти компьютера.&lt;br /&gt;
&lt;br /&gt;
Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые '''знак''' (''sign''), '''порядок''' (''exponent'') и '''мантиссу''' (''mantis''). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа (&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} если число положительное, &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; {{---}} если число отрицательное). При этом порядок записывается как целое число в [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|коде со сдвигом]], а мантисса {{---}} в [[#Нормальная и нормализованная форма|нормализованном виде]], своей дробной частью в двоичной системе счисления. Вот пример такого числа из &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; двоичных разрядов:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=10 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
&amp;lt;!-- 8 бит --&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Знак {{---}} один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(-1)^S \times M \times B^E&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} знак, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} основание, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядок, а &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} мантисса.&lt;br /&gt;
Десятичное число, записываемое как &amp;lt;tex&amp;gt; ReE&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; {{---}} число в полуинтервале &amp;lt;tex&amp;gt;[1; 10)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} степень, в которой стоит множитель &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;;&lt;br /&gt;
В нормализированной форме модуль &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; будет являться мантиссой, а &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} порядком, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; будет равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; принимает отрицательное значение.&lt;br /&gt;
Например, в числе &amp;lt;tex&amp;gt;-2435e9&amp;lt;/tex&amp;gt; &lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;2435&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порядок также иногда называют '''экспонентой''' или просто '''показателем степени'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO:Абзац ниже нужно перенести в раздел с проблемами чисел --&amp;gt;&lt;br /&gt;
При этом лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.&lt;br /&gt;
&lt;br /&gt;
Так же используется формат хранения чисел с фиксированной точкой, который используется для неточных расчётов. Очевидно, что степень числа не хранится в оперативной памяти, а выделяется место для хранения целого числа. Порядок же задаётся программистом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Нормальная и нормализованная форма ==&lt;br /&gt;
&lt;br /&gt;
'''Нормальной формой''' (''normal form'') числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале &amp;lt;tex&amp;gt;[0; 1)&amp;lt;/tex&amp;gt;. Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt; можно записать в 4 формах — &amp;lt;tex&amp;gt;0,0001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,001&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,01&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−2&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, &amp;lt;tex&amp;gt;0,1&amp;lt;/tex&amp;gt;×&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;−3&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;), поэтому распространена также другая форма записи — '''нормализованная''' (''normalized''), в которой мантисса десятичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt; (не включительно), а мантисса двоичного числа принимает значения от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (включительно) до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; (а заодно и некоторых других [[#Особые значения чисел с плавающей точкой|полезных чисел]], таких как &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Типы чисел с плавающей точкой (по IEEE 754) ==&lt;br /&gt;
=== Число половинной точности (''Binary16'', ''Half precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ полови́нной то́чности'''  — компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=6 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=4 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код|со сдвигом]] '''&amp;lt;tex&amp;gt;-15&amp;lt;/tex&amp;gt;'''. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле &amp;lt;tex&amp;gt;2^{b-1}-1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; {{---}} число бит, отведенное на хранение порядка (в случае числа половинной точности &amp;lt;tex&amp;gt;b=5&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Ограничения точности'''&lt;br /&gt;
* Целые от нуля до &amp;lt;tex&amp;gt;2048&amp;lt;/tex&amp;gt; передаются как есть.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;2049&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;4096&amp;lt;/tex&amp;gt; округляются к ближайшему чётному целому.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;4097&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;8192&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося нацело на четыре.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;8193&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;16384&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на восемь.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;16385&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;32768&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на шестнадцать.&lt;br /&gt;
* Целые от &amp;lt;tex&amp;gt;32769&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;65535&amp;lt;/tex&amp;gt; округляются до ближайшего целого, делящегося на тридцать два.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число одинарной точности (''Binary32'', ''Single precision'', ''float'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ одина́рной то́чности''' — компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: transparent; border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=8 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок (8 бит)&lt;br /&gt;
!colspan=24 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса (23+1 бита)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|30&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|23&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=20 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|22&lt;br /&gt;
|colspan=3  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-127&amp;lt;/tex&amp;gt;'''. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Число двойной точности (''Binary64'', ''Double precision'', ''double'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ двойно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;64&amp;lt;/tex&amp;gt; бита или &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(11 бит)&lt;br /&gt;
!colspan=53 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(52+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|62&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|52&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=48 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|51&lt;br /&gt;
|colspan=4  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
=== Число четверной точности (''Binary128'', ''Quadruple precision'') ===&lt;br /&gt;
&lt;br /&gt;
'''Число́ четверно́й то́чности''' — &lt;br /&gt;
компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt; бит или &amp;lt;tex&amp;gt;16&amp;lt;/tex&amp;gt; байт). Используется в случае необходимости крайне высокой точности.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=7 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=15 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&amp;lt;br /&amp;gt;(15 бит)&lt;br /&gt;
!colspan=47 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=8  style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|126&lt;br /&gt;
|colspan=7  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|112&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=38 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|111&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=66 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&amp;lt;br /&amp;gt;(112+1 бит)&lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|colspan=66  style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
Порядок записан со сдвигом '''&amp;lt;tex&amp;gt;-16383&amp;lt;/tex&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки (но присутствует в процессоре Intel). Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью).&lt;br /&gt;
В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Диапазон значений чисел с плавающей запятой ===&lt;br /&gt;
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, &amp;quot;не число&amp;quot;, получается как результат операций типа деления нуля на ноль) и &amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная таблица только лишь примерно указывает границы допустимых значений, без учета возрастающей погрешности с ростом абсолютного значения и существования [[#Денормализованные числа|денормализованных чисел]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Выкинуть нафиг эту бессмысленную таблицу, переписать весь раздел, привести распределение значений и формулу для подсчета их количества --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Название в IEEE 754|| Название типа переменной в Си || Диапазон значений || Бит в мантиссе || Бит на переменную&lt;br /&gt;
 |-&lt;br /&gt;
 |Half precision||-||6,10&amp;amp;times;10&amp;lt;sup&amp;gt;-5&amp;lt;/sup&amp;gt;..65504||11||16&lt;br /&gt;
 |-&lt;br /&gt;
 |Single presicion||float||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-38&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;38&amp;lt;/sup&amp;gt;||23||32&lt;br /&gt;
 |-&lt;br /&gt;
 |Double precision||double||1,7&amp;amp;times;10&amp;lt;sup&amp;gt;-308&amp;lt;/sup&amp;gt;..1,7&amp;amp;times;10&amp;lt;sup&amp;gt;308&amp;lt;/sup&amp;gt;||53||64&lt;br /&gt;
 |-&lt;br /&gt;
 |Extended precision||На некоторых архитектурах long double||3,4&amp;amp;times;10&amp;lt;sup&amp;gt;-4932&amp;lt;/sup&amp;gt;..3,4&amp;amp;times;10&amp;lt;sup&amp;gt;4932||65||80&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== Особые значения чисел с плавающей точкой ==&lt;br /&gt;
=== Ноль (со знаком) ===&lt;br /&gt;
Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка {{---}} число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.  &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Арифметика нуля со знаком'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{ \left| x \right| } = -0\,\!&amp;lt;/tex&amp;gt; (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) \cdot (-0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\left| x \right| \cdot (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;x + (\pm 0) = x\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-0) + (-0) = -0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(+0) + (+0) = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{-0}{-\infty} = +0\,\!&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\left|x\right|}{-0} = -\infty\,\!&amp;lt;/tex&amp;gt;  (если &amp;lt;tex&amp;gt;x\ne0&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Неопределенность (''NaN'') ===&lt;br /&gt;
'''NaN''' {{---}} это аббревиатура от фразы &amp;quot;''not a number''&amp;quot;. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка {{---}} единицы, а мантисса не нулевая.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется. &lt;br /&gt;
&lt;br /&gt;
'''Как можно получить NaN?'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\infty+(-\infty)= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;0\times\infty= NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\pm0}{\pm0}=\frac{\pm\infty}{\pm\infty} = NaN&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\sqrt{x} = NaN&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;x&amp;lt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Есть и другие способы получения NaN, подробности можно найти по ссылкам в [[#Ссылки|соответствующем разделе]].&lt;br /&gt;
&lt;br /&gt;
По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.&lt;br /&gt;
&amp;lt;!-- TODO: написать про sNaN и qNaN --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Бесконечности ===&lt;br /&gt;
В число с плавающей запятой можно записать значение &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;-\infty&amp;lt;/tex&amp;gt;. Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка {{---}} единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-collapse: collapse; border: none&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: powderblue; border: thin solid black; border-bottom: none&amp;quot;|Знак&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black; border-top: none&amp;quot;|&lt;br /&gt;
!colspan=5 style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|Порядок&lt;br /&gt;
!colspan=11 style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|Мантисса&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|-style=&amp;quot;text-align: right&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color: powderblue; border: thin solid black&amp;quot;|&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;/&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;background-color: lightgreen; border: thin solid black&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border: none&amp;quot;|1,&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: lightcoral; border: thin solid black&amp;quot;|0&lt;br /&gt;
!style=&amp;quot;background-color: transparent; border: none&amp;quot;|&amp;amp;nbsp;=&amp;amp;nbsp;&amp;lt;tex&amp;gt;\pm\infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=2 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|14&lt;br /&gt;
|colspan=3 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|10&lt;br /&gt;
|style=&amp;quot;border: none&amp;quot;| &lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-left: 1px solid gray; text-align: left&amp;quot;|9&lt;br /&gt;
|colspan=5 style=&amp;quot;border: none; border-right: 1px solid gray; text-align: right&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом &lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
\frac{x}{0}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
+\infty,&amp;amp;\text{если $x&amp;gt;0$;}\\&lt;br /&gt;
NaN,&amp;amp;\text{если $x=0$;}\\&lt;br /&gt;
-\infty,&amp;amp;\text{если $x&amp;lt;0$.}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Денормализованные числа ===&lt;br /&gt;
'''Денормализованные числа''' (''denormalized/subnormal numbers'') - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького '''нормализованного''' (&amp;quot;обычного&amp;quot;) значения числа с плавающей запятой.&lt;br /&gt;
Согласно стандарту, если порядок равен своему минимальному значению (все его биты {{---}} нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это &amp;lt;tex&amp;gt;\pm0&amp;lt;/tex&amp;gt;. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего {{---}} нули) и данной мантиссой, '''целая часть которой считается равной нулю, а не единице'''.&lt;br /&gt;
&lt;br /&gt;
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times1.M\times2^E&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E_{min} \le E \le E_{max}&amp;lt;/tex&amp;gt; (''нормализованное число'')&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;(-1)^s\times0.M\times2^{E_{min}}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;E=E_{min}-1&amp;lt;/tex&amp;gt; (''денормализованное число'')&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} бит знака, &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} последовательность битов мантиссы, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; {{---}} значение порядка (с учетом сдвига), &amp;lt;tex&amp;gt;E_{min}&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, используемое для записи чисел (1 {{---}} ''сдвиг'') , &amp;lt;tex&amp;gt;E_{min}-1&amp;lt;/tex&amp;gt; {{---}} минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 {{---}} ''сдвиг'').&lt;br /&gt;
&lt;br /&gt;
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из [http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf статьи Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot; ''(англ.)'']&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Производитель||Процессор||Замедление (разы)&lt;br /&gt;
 |-&lt;br /&gt;
 |IBM||PowerPC 970||2.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon||6.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 3||15.8&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Athlon 64||21.4&lt;br /&gt;
 |-&lt;br /&gt;
 |AMD||Opteron64||23.8&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Core Duo||44.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||P4 Xeon||97.9&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Pentium 4||131.0&lt;br /&gt;
 |-&lt;br /&gt;
 |Intel||Itanium 2||183.2&lt;br /&gt;
 |-&lt;br /&gt;
 |Sun||UltraSPARC IV||520.0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.&lt;br /&gt;
&lt;br /&gt;
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние ''Flush-to-zero'' (''FTZ'') и ''Denormals-are-zero'' (''DAZ''). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. &amp;lt;br/&amp;gt;&lt;br /&gt;
Ярким  примером подобного &amp;quot;отсечения&amp;quot; денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.&lt;br /&gt;
&lt;br /&gt;
В версии стандарта IEEE 754-2008 денормализованные числа (''denormal'' или ''denormalized numbers'') были переименованы в ''subnormal numbers'', то есть в числа, меньшие &amp;quot;нормальных&amp;quot;. Поэтому их иногда еще называют &amp;quot;'''субнормальными'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Действия с числами с плавающей запятой ==&lt;br /&gt;
=== Умножение и деление ===&lt;br /&gt;
Самыми простыми для восприятия арифметическими операциями над числами с плавающей запятой являются умножение и деление. Для того, чтобы умножить два вещественных числа в нормализованной форме необходимо перемножить их мантиссы, сложить порядки, округлить и нормализовать полученное число.&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;4.734612&amp;lt;/tex&amp;gt;        (порядок и мантисса первого числа)&lt;br /&gt;
 × e=&amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;5.417242&amp;lt;/tex&amp;gt;        (порядок и мантисса второго числа)&lt;br /&gt;
 -----------------------&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.648538980104&amp;lt;/tex&amp;gt; (произведение как оно есть)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;25.64854&amp;lt;/tex&amp;gt;        (мантисса после округления)&lt;br /&gt;
   e=&amp;lt;tex&amp;gt;9&amp;lt;/tex&amp;gt;;  m=&amp;lt;tex&amp;gt;2.564854&amp;lt;/tex&amp;gt;        (нормализованная форма)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Соответственно, чтобы произвести деление нужно разделить мантиссу делимого на мантиссу делителя и вычесть из порядка делимого порядок делителя. Затем точно так же округлить мантиссу результата и привести его к нормализованной форме.&lt;br /&gt;
&amp;lt;!-- Всё это круто, но было бы еще круче написать, как оно на реальном железе умножается и делится. В двоичной системе, с учетом округления и всеми делами. Но это, пожалуй, будет уж слишком мощно для формата &amp;quot;вики-конспекта&amp;quot;. лучше куда-нибудь сюда добавить внешнюю ссылку --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сложение и вычитание ===&lt;br /&gt;
Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:&lt;br /&gt;
&lt;br /&gt;
 Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;405,875&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Переведем &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; в машинный вид. Для этого сначала переведем его в двоичную систему счисления.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;/&amp;lt;tex&amp;gt;32&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;-269,21875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;-100001101,00111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Нормализуем полученное двоичное число по правилам машинной арифметики.&lt;br /&gt;
 &amp;lt;tex&amp;gt;-100001101{,}00111&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1{,}0000110100111&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; + &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Число отрицательное, следовательно, в бите знака будет стоять единица.&lt;br /&gt;
&lt;br /&gt;
 Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00001101001110000000000&amp;lt;/tex&amp;gt; (жирным шрифтом выделен порядок числа, длина мантиссы {{---}} 23 бита).&lt;br /&gt;
&lt;br /&gt;
 Переведем второе число в машинный вид, совершая те же действия.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;405,87510&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011010&amp;lt;/tex&amp;gt;...&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1,10010101111000000000011010&amp;lt;/tex&amp;gt;... &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1000&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
 В качестве мантиссы будут сохранены первые &amp;lt;tex&amp;gt;23&amp;lt;/tex&amp;gt; бита после запятой т.е. &amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.&lt;br /&gt;
&lt;br /&gt;
 Второе число положительное, следовательно, бит знака будет содержать ноль.&lt;br /&gt;
&lt;br /&gt;
 Итак в машинном 32-разрядном представлении второе число будет иметь вид:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000111&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;10010101111000000000011&amp;lt;/tex&amp;gt;&lt;br /&gt;
 Далее в арифметических операциях будет использоваться число &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;.&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;, а не &amp;lt;tex&amp;gt;110010101&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;111000000000011&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;=&amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;87510&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; видимо для упрощения(хотя это не совсем корректно).&lt;br /&gt;
&lt;br /&gt;
 Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В &lt;br /&gt;
 компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1001010111100&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0000110100111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1000100010101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок {{---}} уменьшить его на единицу.&lt;br /&gt;
 Знак результата {{---}}  положительный, следовательно, бит знака содержит ноль.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&amp;lt;strong&amp;gt;10000110&amp;lt;/strong&amp;gt;&amp;lt;tex&amp;gt;00010001010100000000000&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Проверим правильность наших вычислений. Переведем результат в десятичное представление.&lt;br /&gt;
&lt;br /&gt;
 Найдем реальный порядок результата, вычтя из него значение смещения &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 E = &amp;lt;tex&amp;gt;10000110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;1111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;134&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; - &amp;lt;tex&amp;gt;127&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Следовательно, число результата будет иметь вид:&lt;br /&gt;
 A = &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;000100010101&amp;lt;/tex&amp;gt; &amp;amp;times; &amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;111&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; = &amp;lt;tex&amp;gt;10001000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;10101&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Результат наших вычислений верен, так как &amp;lt;tex&amp;gt;405&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;875&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;269&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;21875&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;136&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;65625&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм получения представления вещественного числа в памяти ЭВМ ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Покажем преобразование действительного числа для представления его в &lt;br /&gt;
&lt;br /&gt;
памяти ЭВМ на примере величины типа Double.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Как видно из таблицы, величина этого типа занимает в памяти &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; байт. На &lt;br /&gt;
&lt;br /&gt;
рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 !Знак || Смещённый порядок || Мантисса&lt;br /&gt;
 |-&lt;br /&gt;
 |63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Можно заметить, что старший бит, отведенный под мантиссу, имеет номер &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;51&amp;lt;/tex&amp;gt;, т.е. мантисса занимает младшие &amp;lt;tex&amp;gt;52&amp;lt;/tex&amp;gt; бита. Черта указывает здесь на &lt;br /&gt;
&lt;br /&gt;
положение двоичной запятой. Перед запятой должен стоять бит целой части &lt;br /&gt;
&lt;br /&gt;
мантиссы, но поскольку она всегда равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, здесь данный бит не требуется и &lt;br /&gt;
&lt;br /&gt;
соответствующий разряд отсутствует в памяти (но он подразумевается). &lt;br /&gt;
&lt;br /&gt;
Значение порядка хранится здесь не как целое число, представленное в &lt;br /&gt;
&lt;br /&gt;
дополнительном коде. Для упрощения вычислений и сравнения действительных &lt;br /&gt;
&lt;br /&gt;
чисел значение порядка в ЭВМ хранится в виде &amp;lt;strong&amp;gt;смещенного числа&amp;lt;/strong&amp;gt;, т.е. к &lt;br /&gt;
&lt;br /&gt;
настоящему значению порядка перед записью его в память прибавляется &lt;br /&gt;
&lt;br /&gt;
смещение. Смещение выбирается так, чтобы минимальному значению порядка &lt;br /&gt;
&lt;br /&gt;
соответствовал нуль. Например, для типа Double порядок занимает &amp;lt;tex&amp;gt;11&amp;lt;/tex&amp;gt; бит и &lt;br /&gt;
&lt;br /&gt;
имеет диапазон от &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; до &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;, поэтому смещение равно &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1111111111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;. Наконец, бит с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; указывает на знак числа.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Таким образом, из вышесказанного вытекает следующий &amp;lt;strong&amp;gt;алгоритм&amp;lt;/strong&amp;gt; для &lt;br /&gt;
&lt;br /&gt;
получения представления действительного числа в памяти ЭВМ:&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;перевести модуль данного числа в двоичную систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;нормализовать двоичное число, т.е. записать в виде &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;2&amp;lt;I&amp;gt;&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt;&amp;lt;/I&amp;gt;, где &amp;lt;I&amp;gt;M&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; &lt;br /&gt;
&lt;br /&gt;
мантисса (ее целая часть равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;) и &amp;lt;I&amp;gt;p&amp;lt;/I&amp;gt;&amp;amp;nbsp;&amp;amp;#151; порядок, записанный в &lt;br /&gt;
&lt;br /&gt;
десятичной системе счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;прибавить к порядку смещение и перевести смещенный порядок в двоичную &lt;br /&gt;
&lt;br /&gt;
систему счисления;&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;учитывая знак заданного числа (0&amp;amp;nbsp;&amp;amp;#151; положительное; 1&amp;amp;nbsp;&amp;amp;#151; отрицательное), &lt;br /&gt;
&lt;br /&gt;
выписать его представление в памяти ЭВМ.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Запишем код числа &amp;lt;tex&amp;gt;-312&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;3125&amp;lt;/tex&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Двоичная запись модуля этого числа имеет вид &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Имеем &amp;lt;tex&amp;gt;100111000&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;0101&amp;lt;/tex&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;001110000101&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Получаем смещенный порядок &amp;lt;tex&amp;gt;8&amp;lt;/tex&amp;gt; + &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;. Далее имеем &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;1031&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;10000000111&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Окончательно&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 1 || 10000000111 || 0011100001010000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Очевидно, что более компактно полученный код стоит записать следующим &lt;br /&gt;
&lt;br /&gt;
образом: C073850000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt;.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Другой пример иллюстрирует обратный переход от кода действительного &lt;br /&gt;
&lt;br /&gt;
числа к самому числу.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;B&amp;gt;Пример.&amp;lt;/B&amp;gt; Пусть дан код 3FEC600000000000&amp;lt;sub&amp;gt;(16)&amp;lt;/sub&amp;gt; или&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 | 0 || 01111111110 || 1100011000000000000000000000000000000000000000000000&lt;br /&gt;
 |-&lt;br /&gt;
 | 63 || 62..52 || 51..0&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Прежде всего замечаем, что это код положительного числа, поскольку в &lt;br /&gt;
&lt;br /&gt;
разряде с номером &amp;lt;tex&amp;gt;63&amp;lt;/tex&amp;gt; записан нуль. Получим порядок этого числа: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;01111111110&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt; = &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt;&amp;lt;sub&amp;gt;(&amp;lt;tex&amp;gt;10&amp;lt;/tex&amp;gt;)&amp;lt;/sub&amp;gt;; &amp;lt;tex&amp;gt;1022&amp;lt;/tex&amp;gt; - &amp;lt;tex&amp;gt;1023&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Число имеет вид &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;1100011&amp;lt;/tex&amp;gt;&amp;amp;nbsp;&amp;amp;times;&amp;amp;nbsp;&amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;&amp;lt;/sup&amp;gt; или &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;11100011&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;Переводом в десятичную систему счисления получаем &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;,&amp;lt;tex&amp;gt;88671875&amp;lt;/tex&amp;gt;.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Представление символов, таблицы кодировок]]&lt;br /&gt;
* [[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
[http://charm.cs.uiuc.edu/papers/SubnormalOSIHPA06.pdf Статья Isaac Dooley, Laxmikant Kale &amp;quot;Quantifying the Interference Caused by Subnormal Floating-Point Values&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
=== Использованные материалы ===&lt;br /&gt;
'''На русском'''&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Википедия {{---}} Экспоненциальная запись]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9 Википедия {{---}} Число с плавающей запятой]&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B8%D1%86%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%BE%D0%BB%D1%8C Википедия {{---}} Отрицательный и положительный ноль]&lt;br /&gt;
*[http://habrahabr.ru/blogs/cpp/112953/ Хабрахабр {{---}} статья пользователя Yruslan &amp;quot;Что нужно знать про арифметику с плавающей запятой&amp;quot;]&lt;br /&gt;
*[http://www.sgu.ru/prcnit/teach/3.php Статья Лапшевой Е.Е. &amp;quot;Машинная арифметика с вещественными числами&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
'''На английском'''&lt;br /&gt;
*[http://en.wikipedia.org/wiki/NaN Wikipedia {{---}} NaN]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Floating_point Wikipedia {{---}} Floating point]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/IEEE_754-2008 Wikipedia {{---}} IEEE 754-2008]&lt;br /&gt;
&lt;br /&gt;
=== Что стоит прочесть ===&lt;br /&gt;
* [http://grouper.ieee.org/groups/754 Материалы по стандарту IEEE 754 ''(англ.)'']&lt;br /&gt;
* [http://softelectro.ru/ieee754.html Русский перевод стандарта IEEE 754]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Представление информации]]&lt;/div&gt;</summary>
		<author><name>Паршуков Кирилл</name></author>	</entry>

	</feed>