Представление числа в системе остаточных классов — различия между версиями
Isaeva (обсуждение | вклад) |
Isaeva (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
Эта величина характеризует объём диапазона системы. Под системой остаточных классов понимают такую непозиционную систему счисления, в которой целое неотрицательное число А можно представить в виде набора остатков от деления этого числа на выбранные основания системы, т. е. | Эта величина характеризует объём диапазона системы. Под системой остаточных классов понимают такую непозиционную систему счисления, в которой целое неотрицательное число А можно представить в виде набора остатков от деления этого числа на выбранные основания системы, т. е. | ||
− | <math>A = a_1, a_2 , \ldots , a_n</math>, где <math>a_i = A-[ \frac {A}{p_i}]\cdot p_i, i=1,\ldots ,n</math>. | + | |
+ | <math>A = a_1, a_2 , \ldots , a_n</math>, где <math>a_i = A-[ \frac {A}{p_i}]\cdot p_i, i=1,\ldots ,n</math> (1). | ||
Возможность такого представления числа определяется [[Теорема о делении с остатком |теоремой о делении с остатком в кольце целых чисел]]. Напомним формулировку этой теоремы (в обозначениях этого раздела). | Возможность такого представления числа определяется [[Теорема о делении с остатком |теоремой о делении с остатком в кольце целых чисел]]. Напомним формулировку этой теоремы (в обозначениях этого раздела). | ||
Строка 53: | Строка 54: | ||
Справедливость этих правил выполнения арифметических действий в СОК непосредственно вытекает из свойств сравнения. | Справедливость этих правил выполнения арифметических действий в СОК непосредственно вытекает из свойств сравнения. | ||
+ | |||
+ | Действительно, равенства можно переписать в виде | ||
+ | |||
+ | <math>c_i=A+B - [\frac{A+B}{p_i}], i=1,\ldots ,n</math>. | ||
+ | |||
+ | Из представления <math>A</math> и <math>B</math> по теореме о делении с остатком следует, что | ||
+ | |||
+ | <math>A=k_i\cdot p_i+a_i</math>, | ||
+ | <math>B=l_i\cdot p_i+b_i</math>, | ||
+ | |||
+ | где <math> i=1,\ldots ,n</math>, | ||
+ | <math>k_i\in Z, k_i\ge 0</math>, | ||
+ | <math>l_i\in Z, l_i\ge 0</math>. | ||
+ | |||
+ | Тогда | ||
+ | <math>A+B=(k_i+l_i)\cdot p_i + a_i + b_i</math>, | ||
+ | <math>[\frac{A+B}{p_i}]=k_i+l_i + [\frac{a_i + b_i}{p_i}]\cdot p_i</math>, | ||
+ | |||
+ | Откуда | ||
+ | <math>c_i = a_i+b_i- [\frac{a_i + b_i}{p_i}]\cdot p_i</math>. | ||
+ | |||
+ | В случае умножения | ||
+ | |||
+ | <math>d_i = a_i\cdot b_i- [\frac{A\cdot B}{p_i}]\cdot p_i</math>. | ||
+ | |||
+ | Тогда | ||
+ | <math>A\cdot B=k_i\cdot l_i\cdot {p_i}^2 + (a_i\cdot l_i + b_i\cdot k_i)\cdot p_i + a_i\cdot b_i</math>, | ||
+ | <math>[\frac{A\cdot B}{p_i}]=k_i\cdot l_i\cdot p_i + a_i\cdot l_i + b_i\cdot k_i + \frac{a_i\cdot b_i}{p_i}</math>. | ||
+ | |||
+ | Следовательно, | ||
+ | <math>d_i = a_i\cdot b_i- [\frac{a_i\cdot b_i}{p_i}]\cdot p_i, (i=1,\ldots , n)</math>. | ||
+ | |||
+ | '''Примеры''' | ||
+ | |||
+ | '''Выводы''' | ||
+ | |||
+ | В отличие от позиционной системы счисления (ПСС), значение числа в модулярном коде не зависит от местоположения каждого разряда в его представлении, а зависит от значения основания соответствующего разряда. Поэтому модулярный код является непозиционным. | ||
+ | Таким образом, выполнение арифметических операций в модулярном коде производится независимо по каждому из модулей, что и указывает на параллелизм данной системы. Это обстоятельство определяет поразрядное выполнение операций. Это свойство избавит от необходимости «занимать» или «переносить» единицу старшего разряда, что приводит к появлению кодов с параллельной структурой. Это позволяет распараллелить алгоритмы при выполнении арифметических операций. | ||
+ | |||
+ | Перевод чисел из ПСС в СОК при помощи выражения (1) связан с реализацией операции деления, поэтому использование данного метода неэффективно. | ||
+ | Итак, операции сложения и умножения над числами, представленными в СОК, сводятся к соответствующим операциям над цифрами этого представления. Это относится и к возведению в степень, к вычислению значений многочлена и т. п. Операция вычитания в СОК заменяется сложением с аддитивной инверсией отрицательного числа. Все эти операции модульные, т. е. не требуют позиционных характеристик обрабатываемых чисел. |
Версия 12:58, 11 сентября 2014
Представление чисел в виде набора остатков от деления на выбранные натуральные модули - основания системы называется системой остаточных классов - СОК (residue number system - RNS) или модулярной системой счисления - МСС (modular system).
Такие системы счисления являются непозиционными кодами с параллельной структурой, которые позволяют реализовать идею распараллеливания операций на уровне выполнения элементарных арифметических действий.
Пусть заданы положительные числа , которые называют основаниями или модулями системы. Обозначим .
Эта величина характеризует объём диапазона системы. Под системой остаточных классов понимают такую непозиционную систему счисления, в которой целое неотрицательное число А можно представить в виде набора остатков от деления этого числа на выбранные основания системы, т. е.
, где (1).
Возможность такого представления числа определяется теоремой о делении с остатком в кольце целых чисел. Напомним формулировку этой теоремы (в обозначениях этого раздела).
Теорема
Если , то существуют единственные , такие, что .
Несложно заметить, что каждый остаток получается независимо от других и содержит информацию обо всём числе.
Установить взаимно-однозначное соответствие между целыми числами из диапазона и их остатками позволяет китайская теорема об остатках.
Возможность применения СОК в вычислительных алгоритмах обуславливается наличием определённого изоморфизма между математическими операциями над целыми числами и соответствующими операциями над системой целых неотрицательных остатков по отдельным модулям. Причём сложение, умножение, возведение в целую положительную степень любых целых положительных чисел совершенно идентичны соответствующим операциям, выполняемым над системой остатков.
Пусть операнды и , а также результаты операций сложения и умножения и A\cdot B</math> представлены соответственно остатками
по основаниям , причём оба числа и результаты находятся в диапазоне , то есть
,
,
,
,
и
, , , .
Эти выражения можно переписать в виде
; ;
; ;
Справедливость этих правил выполнения арифметических действий в СОК непосредственно вытекает из свойств сравнения.
Действительно, равенства можно переписать в виде
.
Из представления и по теореме о делении с остатком следует, что
, ,
где , , .
Тогда , ,
Откуда .
В случае умножения
.
Тогда , .
Следовательно, .
Примеры
Выводы
В отличие от позиционной системы счисления (ПСС), значение числа в модулярном коде не зависит от местоположения каждого разряда в его представлении, а зависит от значения основания соответствующего разряда. Поэтому модулярный код является непозиционным. Таким образом, выполнение арифметических операций в модулярном коде производится независимо по каждому из модулей, что и указывает на параллелизм данной системы. Это обстоятельство определяет поразрядное выполнение операций. Это свойство избавит от необходимости «занимать» или «переносить» единицу старшего разряда, что приводит к появлению кодов с параллельной структурой. Это позволяет распараллелить алгоритмы при выполнении арифметических операций.
Перевод чисел из ПСС в СОК при помощи выражения (1) связан с реализацией операции деления, поэтому использование данного метода неэффективно. Итак, операции сложения и умножения над числами, представленными в СОК, сводятся к соответствующим операциям над цифрами этого представления. Это относится и к возведению в степень, к вычислению значений многочлена и т. п. Операция вычитания в СОК заменяется сложением с аддитивной инверсией отрицательного числа. Все эти операции модульные, т. е. не требуют позиционных характеристик обрабатываемых чисел.