Adaptive precision arithmetic — различия между версиями
Smolcoder (обсуждение | вклад) (→Background) |
Smolcoder (обсуждение | вклад) (→Background) |
||
Строка 19: | Строка 19: | ||
'''Например''', числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются. | '''Например''', числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются. | ||
+ | |||
+ | Иногда для использовании точной арифметики может понадобиться больше, чем <tex>p</tex> бит для хранения величин. В связи с этим вводится одно из базовых форм хранения чисел для такой арифметики. | ||
+ | {{Определение | ||
+ | |definition= | ||
+ | '''Расширением''' числа <tex>x</tex> называется такое его представление <tex>x = x_n + x_{n-1} + \dots + x_1</tex>, где каждое <tex>x_i</tex> выражено <tex>p</tex>-битным числом с плавающей точкой и называется '''компонентой''' этого расширения. | ||
+ | }} |
Версия 04:29, 20 октября 2011
Мотивация
Все вычисления, производимые компьютером во floating-point[1] модели, имеют погрешность. При большом количестве арифметических действий она возрастает. Во многих случаях результирующая погрешность уже не устраивает, и требуется либо абсолютно точное вычисление, либо меньшая погрешность. Одним из решений данной проблемы является хранение чисел в виде рациональных дробей, в которых числитель и знаменатель представляется в виде длинного целого числа. Но работать с такими числами довольно "дорого" по времени и тяжело в реализации: необходимо писать факторизацию чисел, эффективно сокращать дроби. Для улучшения работы нужны определенные оптимизации. Одной из них и является использование adaptive precision arithmetic.
Background
Большинство современных процессоров поддерживают числа с плавающей точкой в форме
. Значащая часть числа (мантисса) представляет собой -битное двоичное число в форме , где каждое обозначает один бит. Также имеется один бит на знак.Числа с плавающей точкой, как правило, нормализованы, то есть если число не равно нулю, то первый значимый бит равен единице, а экспонента устанавливается соответственно. Например, в
-битной арифметике число 1101 (десятичное 13) будет выглядеть как .
Определение: |
Два числа | и называются неперекрывающимися (англ. nonoverlapping), если номер наименьшего значимого бита числа (нумерация справа налево) больше, чем номер наибольшего значимого бита числа , или наоборот.
Более формально, и не перекрываются, если существует такое целое число и , что и , или и .
Ноль не пересекается ни с одним другим числом.
Например, числа 1100 и -10.1 не пересекаются, а 101 и 10 - пересекаются.
Иногда для использовании точной арифметики может понадобиться больше, чем
бит для хранения величин. В связи с этим вводится одно из базовых форм хранения чисел для такой арифметики.Определение: |
Расширением числа | называется такое его представление , где каждое выражено -битным числом с плавающей точкой и называется компонентой этого расширения.