Отсюда родились требования к обязательной нормализации чисел после каждого арифметического действия, и как следствие, большие проблемы с представлением чисел, лежащих вблизи нуля, а также невозможность получения нуля в явном виде. Это все приводит к неоправданным затратам вычислительных ресурсов на нормализацию и борьбу с ее последствиями.
Предлагаемая здесь работа является логическим продолжением предыдущих двух моих топиков на Хабре. В своих рассуждениях я оттолкнулся от естественного представления чисел и ограничений, которые накладываются на числа, вследствие конечности носителя, на который они записываются. Такой подход позволил получить ряд очень важных выводов. Основной из них заключается в том, что процесс нормализации не является обязательным на всех этапах проведения арифметических операций. Более того, именно обязательная нормализация привела к необходимости введения специального класса денормализованных чисел, что существенно увеличило программно-аппаратные затраты.
Предложенный подход позволил прийти к выводу, что, добавлением всего одного разряда в машинном слове, можно в
![](https://habrastorage.org/files/dc7/7a4/273/dc77a4273586479c8f64d9bfcad857f1.gif)
В статье вы найдете целый ряд нетривиальных выводов, которые позволяют по-новому взглянуть на представление чисел с плавающей запятой в машинном коде.
![](https://habrastorage.org/files/48c/708/fd2/48c708fd2ce9440584880213c236316b.gif)
![](https://habrastorage.org/files/d3a/774/c5b/d3a774c5bc164824b8103fea72911a33.gif)
![](https://habrastorage.org/files/1e0/f20/94a/1e0f2094a8014943beaefe22a7460ca0.gif)
![](https://habrastorage.org/files/d7c/255/0be/d7c2550be9eb4ce98cc1aa5ec230b1df.gif)
![](https://habrastorage.org/files/b88/2c4/81a/b882c481a69c4d72a485a25d160b5080.gif)
![](https://habrastorage.org/files/5f6/e31/815/5f6e318158f64776b093506f52567914.gif)
![](https://habrastorage.org/files/da1/93f/fa7/da193ffa719a4a1882add9d7260ad11b.gif)
![](https://habrastorage.org/files/7b0/fed/4ba/7b0fed4ba15d4cf2b37205572b994e70.gif)
![](https://habrastorage.org/files/b21/59d/87f/b2159d87f50c4a0ca36157176d58a0ce.gif)
![](https://habrastorage.org/files/300/578/ef7/300578ef770f4361b72f8ea5653f200a.gif)
![](https://habrastorage.org/files/5c9/21e/c3b/5c921ec3b6274080bdb846bc244d0ef6.gif)
![](https://habrastorage.org/files/d5d/73e/107/d5d73e1074f34797b97f20131eba0c80.gif)
![](https://habrastorage.org/files/749/265/278/749265278e624416ba83ca910452d747.gif)
![](https://habrastorage.org/files/08e/de5/f87/08ede5f87b1a45d7abea65c8b36f9203.gif)
![](https://habrastorage.org/files/1e1/506/46b/1e150646b459416ba39f4b06b3542784.gif)
![](https://habrastorage.org/files/cf1/c5c/c32/cf1c5cc324ff471e9824300a20f00092.gif)
Комментарии (20)
zzashpaupat
03.12.2015 14:37+2А зачем вместо обычного текста, в посте картинки с текстом? Вы боитесь, что кто-то скопирует ваши измышления и выдаст за свои? Так если захотеть, то можно и картинку распознать.
P.S. Я всегда буду обновлять комментарии перед отправкой своего.Innotor
03.12.2015 14:41+3Да нет, просто мне администрация Хабра на мой вопрос, «как публиковать формулы» ответила, что только используя изображение. А поскольку формул много, в целях экономии времени, я весь текст в картинки перевел.
encyclopedist
03.12.2015 15:00Есть онлайн-редакторы, которые позволяют это делать довольно быстро, например latex.codecogs.com/eqneditor/editor.php, или даже специализированные инструменты, как вот тут habrahabr.ru/post/263213
Innotor
03.12.2015 15:10Текст в PDF можно посмотреть по ссылке yadi.sk/i/UYfZjfNakwFoM
igordata
03.12.2015 15:29На Хабре не работает поиск ни по тексту на картинке, ни по пдфкам в ссылках.
Maccimo
04.12.2015 16:18Для формул из статьи вполне достаточно и обычного HTML и википедии: https://en.wikipedia.org/wiki/Mathematical_operators_and_symbols_in_Unicode
Чтобы не быть голословным: http://jsfiddle.net/q9xfj9b0/
Uranix
04.12.2015 10:11По-моему логично, что работа с денормализованными числами в IEEE не сложнее работы с предлагаемыми ненормализованными числами
Innotor
04.12.2015 10:45Для программиста, с точки зрения написания кода, это видимо не сильно заметно.
Но согласно данным, приведенным в работе. charm.cs.illinois.edu/newPapers/06-13/paper.pdf (См. TABLE II
WORST CASE SLOWDOWNS ON OUR SUBNORMAL SLOWDOWN
MICRO-BENCHMARK ON COMMON MICRO-ARCHITECTURES) использование денормализованных чисел существенно замедляет работу процессора. А там, где она сведена к минимуму, это достигается большими аппаратными затратами.Uranix
04.12.2015 10:46я про реализацию на уровне железа
Innotor
04.12.2015 11:25Денормализованные, или субнормальные числа в IEEE отнесены к особому случаю и обрабатываются по особым алгоритмам. И алгоритмы эти в сопроцессоре существенно отличаются от работы с нормализованными числами.
Uranix
04.12.2015 11:38+1Вот, а у меня после прочтения сложилось впечатление, что вы этот алгоритм предлагаете использовать всегда.
Innotor
04.12.2015 11:43О каком алгоритме идет речь? Если не использовать специально нормализацию, то работа с нормализованными и денормализованными числами ничем не будет отличаться. Они будут обрабатываться по одним и тем же алгоритмам.
Innotor
04.12.2015 15:48Извините, я сразу не понял о каком алгоритме идет речь. В алгоритме, который я предлагаю, нет разницы между нормализованными и ненормализованными числами. Поэтому нет особого случая. Все числа обрабатываются одинаково. В том же случае, когда порядок числа по абсолютной величине превышает максимальное значение, которое может он принимать, наступает переполнение.
Uranix
04.12.2015 16:27Я лишь говорю, что ваш алгоритм соответствует по сложности алгоритму работы с денормализованными числами в IEEE. В любом случае, без сравнения конкретных алгоритмов или их железной реализации, это лишь впечатление, которое может быть неверным.
EjikVTumane
Текст картинкой?! o_O
nerudo
Автор, похоже, поленился набивать формулы недружелюбным для этого средством. В целом, решение вполне здравое ;-)
Uranix
А чего стоят ссылки картинкой