Adaptive precision arithmetic
Мотивация
Все вычисления, производимые компьютером во floating-point[1] модели, имеют погрешность. При большом количестве арифметических действий она возрастает. Во многих случаях результирующая погрешность уже не устраивает, и требуется либо абсолютно точное вычисление, либо меньшая погрешность. Одним из решений данной проблемы является хранение чисел в виде рациональных дробей, в которых числитель и знаменатель представляется в виде длинного целого числа. Но работать с такими числами довольно "дорого" по времени и тяжело в реализации: необходимо писать факторизацию чисел, эффективно сокращать дроби. Для улучшения работы нужны определенные оптимизации. Одной из них и является использование adaptive precision arithmetic.
Background
Большинство современных процессоров поддерживают числа с плавающей точкой в форме
. Значащая часть числа (мантисса) представляет собой -битное двоичное число в форме , где каждое обозначает один бит. Также имеется один бит на знак.Числа с плавающей точкой, как правило, нормализованы, то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в
-битной арифметике число 1101 (десятичное 13) будет выглядеть как .
Определение: |
Два числа | и называются неперекрывающимися (англ. nonoverlapping), если номер наименьшего значимого бита числа (нумерация справа налево) больше, чем номер наибольшего значимого бита числа , или наоборот.
Более формально, и не перекрываются, если существует такое целое число и , что и , или и .