В современном мире вычислительной техники точность и эффективность обработки числовых данных играют ключевую роль, особенно с ростом объемов информации и развитием технологий искусственного интеллекта. Традиционный стандарт представления чисел с плавающей точкой IEEE 754 доминирует в вычислительной арифметике более сорока лет, обеспечивая баланс между производительностью, универсальностью и сложностью аппаратных решений. Однако этот стандарт сталкивается с рядом ограничений, особенно в точности и управлении ошибками при вычислениях с реальными числами. В ответ на эти вызовы в 2015 году профессор Джон Л. Густафсон предложил новый подход — универсальный формат чисел, или Unum (universal number), который с тех пор прошел несколько этапов эволюции, стремясь предложить более точное и эффективное оборудование для работы с числами.
Основная идея Unum заключается в переменной длине представления числа и использовании пространств интервалов для точного описания значения и погрешности, что значительно расширяет возможности работы с числами на компьютере. Первая версия Unum, известная как Type I Unum, представляет собой расширение стандартного формата IEEE 754 с несколькими отличительными особенностями. Во-первых, сама структура числа не фиксирована по длине, здесь переменная ширина выделяется под мантиссу и экспоненту, что позволяет динамически настраивать точность представления в зависимости от задачи. Во-вторых, вводится дополнительный бит — u-bit, который определяет, является ли представленное значение точным числом (u=0) или интервалом между двумя гранями числового пространства (u=1). Это в корне меняет подход к работе с неопределенностью и ошибками округления, позволяя системе оперировать с точными интервалами, гарантируя, что ответ вычислений всегда будет содержаться внутри таких границ.
Такая разновидность числового формата предусматривает использование интервальной арифметики, где вычисления ведутся с парами Unum, или ubound, которые обеспечивают контроль погрешности с математической строгостью. Несмотря на инновационность, Type I Unum имел ряд недостатков, особенно связанные с переменной длиной представления, что осложняло аппаратную реализацию и снижало производительность. Дискуссии между Джоном Густафсоном и одним из главных архитекторов формата IEEE 754 Уильямом М. Каханом на конференции Arith23 выявили эти проблемные места. Для преодоления сложностей и налаживания более практичной модели в 2016 году была предложена вторая версия формата — Type II Unum.
Этот формат претерпел значительные изменения, включая введение дополнительного бита инверсии и отказ от совместимости с IEEE 754, благодаря чему появилась возможность охватить всю проективную числовую прямую, за исключением нескольких особых точек. Тем не менее, необходимость использования обширных таблиц преобразований для различных операций в рамках Type II Unum делала формат весьма сложным для аппаратных реализаций и не получили широкого распространения. Ответом на вызовы стало рождение Type III Unum, также известного под названием posit. Эта модель была официально представлена в феврале 2017 года и позднее стандартизирована специальной группой, работающей над положением числа (Posit Working Group). Формат Posit сочетает в себе аппаратную простоту и качественно новую структуру, способную значительно превосходить IEEE 754 по ряду ключевых характеристик.
Важной отличительной чертой Posit является фиксированная длина слова с вариабельным распределением битов на разные компоненты — знак, режим, экспоненту и мантиссу, в зависимости от числа и степени, что делает его очень гибким и эффективным с точки зрения точности. Структура числа posit представлена четырьмя последовательно расположенными полями. Первое — это бит знака, отвечающий за знак числа. За ним следует режим, закодированный унарным кодом, который определяет порядок масштаба, влияя на динамический диапазон числа. Следующее поле — это выделенные биты экспоненты, обычно два или более, отвечающие за более точное масштабирование.
Остальные биты отводятся под дробную часть или мантиссу, несущую информацию о точности числа. Уникальная кодировка режима позволяет posits гибко расширять или сокращать экспоненту и мантиссу, в зависимости от потребностей конкретного значения, что обеспечивает лучшую точность при сохранении широкого диапазона возможных значений. Значения posits с определённой длиной битов могут иметь специальные интерпретации. Например, если все биты, кроме знака, равны нулю, а знак равен нулю — число интерпретируется как ноль; если знак равен единице — значение считается «не числом» NaR (Not a Real). Это упрощает обработку ошибок и исключительных ситуаций, делая систему более надежной для вычислений.
Posits обладают существенными преимуществами в точности особенно ближе к числам с модулем около 1, именно в этом диапазоне большинство вычислительных операций и возникает, особенно в задачах машинного обучения и нейросетей. В таких случаях posits обеспечивают больше битов дробной части по сравнению с обычными float числами одинаковой длины, что повышает точность и снижает вероятность накопления ошибок. В то же время при работе с очень большими или малыми числами точность несколько снижается, но зато расширяется динамический диапазон, что часто приемлемо в практических задачах. Помимо простого представления чисел, позитивы поддерживают мощный инструмент — quire. Quire — это расширенный формат с увеличенным количеством бит, предназначенный для аккумулирования точных сумм произведений posits без потерь и округлений.
Это крайне важно для операций, таких как скалярные произведения и матричные умножения, где традиционные форматы могут накапливать ошибки и увеличивать неточности. Quire позволяет выполнять итоговые вычисления с гарантированной точностью, существенно улучшая устойчивость и качество вычислительных алгоритмов. В связи с популяризацией использования posits и развитием их экосистемы программного обеспечения появилось множество реализаций, как аппаратных, так и программных. Среди наиболее известных — библиотека SoftPosit, разработанная на основе Berkeley SoftFloat, которая позволяет пользователям легко экспериментировать с форматом posit и сравнивать его с IEEE 754 с точки зрения точности и производительности. Эта библиотека поддерживает арифметические операции, преобразования между типами и ряд вспомогательных функций.
Поддержка существует на различных языках программирования, включая C, C++, Python и Julia, что способствует интеграции posits в разнообразные вычислительные проекты. Многие компании и исследовательские центры активно разрабатывают аппаратные реализации posit, от FPGA и ASIC до интеграции с RISC-V процессорами. Это открывает перспективы для применения нового формата на уровне микропроцессорных ядер в системах с ограниченными ресурсами и в приложениях реального времени. Использование posit в глубоких нейронных сетях уже показывает преимущества в снижении энергопотребления и повышении точности результатов, что особенно актуально в эпоху развития искусственного интеллекта и Интернета вещей. Однако, несмотря на очевидные преимущества, концепция unums и posits имеет как сторонников, так и критиков.
Известный специалист Уильям Кахан, один из авторов стандарта IEEE 754, выразил сомнения по поводу эффективности unums первого типа, отмечая возможные сложности с производительностью из-за переменной длины чисел и требования к дополнительным вычислительным ресурсам, а также обратил внимание на проблемы с определением и обработкой арифметических операций на особых значениях. Тем не менее, многие из этих проблем были частично решены в последующих версиях формата, а растущий интерес и развитие аппаратной и программной поддержки подчеркивают потенциал posit как серьезного конкурента устоявшимся стандартам. На сегодняшний день формат posit вызывает значительный интерес в академических и промышленных кругах, становятся доступны наборы инструментов для его внедрения, а стандарты продолжают совершенствоваться. Переход к posits обещает новую эру числовых вычислений, более точных, эффективных и адаптированных под современные вычислительные задачи. С развитием технологий и ростом требований к вычислительной точности, универсальные числа могут сыграть ключевую роль в построении надежных и высокопроизводительных вычислительных систем будущего.
Таким образом, идея универсальных чисел изначально заложила концепцию более точного, гибкого и мощного способа работы с реальными числами на компьютерах. Эволюция от Type I Unum через Type II к Type III Unum/Posit позволила преодолеть значительную часть проблем, присущих плавающей точке IEEE 754, и предлагает разумное, стандартизированное решение для целого спектра задач, включая научные вычисления, машинное обучение и встроенные системы. Внедрение формата posit и связанных с ним инструментов открывает широкие возможности для улучшения качества и эффективности вычислений во всех сферах информационных технологий.