Adaptive precision arithmetic — различия между версиями
Smolcoder (обсуждение | вклад) |
Smolcoder (обсуждение | вклад) (→Background) |
||
Строка 15: | Строка 15: | ||
Более формально, <tex>x</tex> и <tex>y</tex> не перекрываются, если существует такое целое число <tex>r</tex> и <tex>s</tex>, что <tex>x = r2^s</tex> и <tex>|y| < 2^s</tex>, или <tex>y = r2^s</tex> и <tex>|x| < 2^s</tex>. | Более формально, <tex>x</tex> и <tex>y</tex> не перекрываются, если существует такое целое число <tex>r</tex> и <tex>s</tex>, что <tex>x = r2^s</tex> и <tex>|y| < 2^s</tex>, или <tex>y = r2^s</tex> и <tex>|x| < 2^s</tex>. | ||
+ | |||
+ | '''Например''', числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются. |
Версия 04:16, 20 октября 2011
Мотивация
Все вычисления, производимые компьютером во floating-point[1] модели, имеют погрешность. При большом количестве арифметических действий она возрастает. Во многих случаях результирующая погрешность уже не устраивает, и требуется либо абсолютно точное вычисление, либо меньшая погрешность. Одним из решений данной проблемы является хранение чисел в виде рациональных дробей, в которых числитель и знаменатель представляется в виде длинного целого числа. Но работать с такими числами довольно "дорого" по времени и тяжело в реализации: необходимо писать факторизацию чисел, эффективно сокращать дроби. Для улучшения работы нужны определенные оптимизации. Одной из них и является использование adaptive precision arithmetic.
Background
Большинство современных процессоров поддерживают числа с плавающей точкой в форме
. Значащая часть числа (мантисса) представляет собой -битное двоичное число в форме , где каждое обозначает один бит. Также имеется один бит на знак.Числа с плавающей точкой, как правило, нормализованы, то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в
-битной арифметике число 1101 (десятичное 13) будет выглядеть как .
Определение: |
Два числа | и называются неперекрывающимися (англ. nonoverlapping), если номер наименьшего значимого бита числа (нумерация справа налево) больше, чем номер наибольшего значимого бита числа , или наоборот.
Более формально, и не перекрываются, если существует такое целое число и , что и , или и .
Например, числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются.