Adaptive precision arithmetic — различия между версиями
Smolcoder (обсуждение | вклад) |
Smolcoder (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
Числа с плавающей точкой, как правило, ''нормализованы'', то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в <tex>p</tex>-битной арифметике число 1101 (десятичное 13) будет выглядеть как <tex>1.101 \times 2^3</tex>. | Числа с плавающей точкой, как правило, ''нормализованы'', то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в <tex>p</tex>-битной арифметике число 1101 (десятичное 13) будет выглядеть как <tex>1.101 \times 2^3</tex>. | ||
+ | |||
+ | {{Определение | ||
+ | |definition= | ||
+ | Два числа <tex>x</tex> и <tex>y</tex> называются '''неперекрывающимися''' (англ. '''nonoverlapping'''), если номер наименьшего значимого бита числа <tex>x</tex> (нумерация справа налево) ''больше'', чем номер наибольшего значимого бита числа <tex>y</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>. |
Версия 04:13, 20 октября 2011
Мотивация
Все вычисления, производимые компьютером во floating-point[1] модели, имеют погрешность. При большом количестве арифметических действий она возрастает. Во многих случаях результирующая погрешность уже не устраивает, и требуется либо абсолютно точное вычисление, либо меньшая погрешность. Одним из решений данной проблемы является хранение чисел в виде рациональных дробей, в которых числитель и знаменатель представляется в виде длинного целого числа. Но работать с такими числами довольно "дорого" по времени и тяжело в реализации: необходимо писать факторизацию чисел, эффективно сокращать дроби. Для улучшения работы нужны определенные оптимизации. Одной из них и является использование adaptive precision arithmetic.
Background
Большинство современных процессоров поддерживают числа с плавающей точкой в форме
. Значащая часть числа (мантисса) представляет собой -битное двоичное число в форме , где каждое обозначает один бит. Также имеется один бит на знак.Числа с плавающей точкой, как правило, нормализованы, то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в
-битной арифметике число 1101 (десятичное 13) будет выглядеть как .
Определение: |
Два числа | и называются неперекрывающимися (англ. nonoverlapping), если номер наименьшего значимого бита числа (нумерация справа налево) больше, чем номер наибольшего значимого бита числа , или наоборот.
Более формально, и не перекрываются, если существует такое целое число и , что и , или и .