Adaptive precision arithmetic — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Background)
(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

Большинство современных процессоров поддерживают числа с плавающей точкой в форме [math] \pm significand \times 2^{exponent}[/math]. Значащая часть числа (мантисса) представляет собой [math]p[/math]-битное двоичное число в форме [math]b.bbb \dots[/math], где каждое [math]b[/math] обозначает один бит. Также имеется один бит на знак.

Числа с плавающей точкой, как правило, нормализованы, то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в [math]p[/math]-битной арифметике число 1101 (десятичное 13) будет выглядеть как [math]1.101 \times 2^3[/math].


Определение:
Два числа [math]x[/math] и [math]y[/math] называются неперекрывающимися (англ. nonoverlapping), если номер наименьшего значимого бита числа [math]x[/math] (нумерация справа налево) больше, чем номер наибольшего значимого бита числа [math]y[/math], или наоборот.


Более формально, [math]x[/math] и [math]y[/math] не перекрываются, если существует такое целое число [math]r[/math] и [math]s[/math], что [math]x = r2^s[/math] и [math]|y| \lt 2^s[/math], или [math]y = r2^s[/math] и [math]|x| \lt 2^s[/math].

Ноль не пересекается ни с одним другим числом.

Например, числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются.