Adaptive precision arithmetic — различия между версиями
| Smolcoder (обсуждение | вклад)  (→Background) | 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 - пересекаются. | '''Например''', числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются. | ||
Версия 04:17, 20 октября 2011
Мотивация
Все вычисления, производимые компьютером во floating-point[1] модели, имеют погрешность. При большом количестве арифметических действий она возрастает. Во многих случаях результирующая погрешность уже не устраивает, и требуется либо абсолютно точное вычисление, либо меньшая погрешность. Одним из решений данной проблемы является хранение чисел в виде рациональных дробей, в которых числитель и знаменатель представляется в виде длинного целого числа. Но работать с такими числами довольно "дорого" по времени и тяжело в реализации: необходимо писать факторизацию чисел, эффективно сокращать дроби. Для улучшения работы нужны определенные оптимизации. Одной из них и является использование adaptive precision arithmetic.
Background
Большинство современных процессоров поддерживают числа с плавающей точкой в форме . Значащая часть числа (мантисса) представляет собой -битное двоичное число в форме , где каждое обозначает один бит. Также имеется один бит на знак.
Числа с плавающей точкой, как правило, нормализованы, то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в -битной арифметике число 1101 (десятичное 13) будет выглядеть как .
| Определение: | 
| Два числа и называются неперекрывающимися (англ. nonoverlapping), если номер наименьшего значимого бита числа (нумерация справа налево) больше, чем номер наибольшего значимого бита числа , или наоборот. | 
Более формально,  и  не перекрываются, если существует такое целое число  и , что  и , или  и .
Ноль не пересекается ни с одним другим числом.
Например, числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются.
