Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БЕКИН_Д_ЖЕНАТОВ.doc
Скачиваний:
35
Добавлен:
24.08.2019
Размер:
4.5 Mб
Скачать

8.2. Использование кода Грея

Благодаря своему основному свойству (отличие соседних чисел только в одном разряде) код Грея применяется, например, в построенных на кодовых дисках определителях углового положения вала. В оптическом кодовом диске единицы и нули кодируются прозрачными и непрозрачными областями. С одной стороны диск просвечивается ориентированной вдоль его радиуса световой щелью, с другой стороны размещаются фотодиоды. Считываемый с фотодиодов двоичный код и указывает угол поворота диска.

Недостаток кодирования позиционным двоичным кодом заключается в том, что при смене нечётного кода чётным считанный с фотодиода код может оказаться неверным. Характеристики фотодиодов обычно не идентичны и при смене сразу нескольких разрядов выходные уровни фотодиодов могут измениться не строго одновременно. Например, при переходе от третьего угла к четвёртому или от седьмого угла к нулевому меняются все разряды и какое-то время на выходе фотодиодов можно получить любое значение от 0 до 7. В коде же Грея при переходах ошибка не будет превышать один угол.

8.3. Алгоритмы преобразования кода Грея

Как сказано выше, алгоритм перевода чисел в коде Грея в позиционный код прост: каждый разряд в позиционном коде равен сумме по модулю 2 этого и всех более старших разрядов в коде Грея. Старшие разряды, соответственно, совпадают. На языке Cи это алгоритм может выглядеть так:

unsigned gray2bin(unsigned v){

unsigned sum = v, length = BITS;

while(length > 0) v >>= 1, sum ^= v, length--;

return sum;

}

Этот код является дословным переводом на язык C основного алгоритма, но его можно оптимизировать за счёт накопления промежуточных сумм в самом числе:

for(unsigned i = 1; i < BITS; i <<= 1) v ^= (v >> i);

Поскольку количество итераций здесь является уже логарифмом от числа бит и мало даже для очень больших чисел, то этот цикл лучше развернуть:

v ^= v >> 1; /* для 2-разрядных чисел */

v ^= v >> 2; /* для 4-разрядных чисел */

v ^= v >> 4; /* для 8-разрядных чисел */

v ^= v >> 8; /* для 16-разрядных чисел */

...Перевод из позиционного кода в код Грея ещё проще: каждый разряд в коде Грея равен сумме по модулю 2 этого и следующего старшего разряда в позиционном коде. На языке C, например, этот алгоритм реализуется выражением v^(v>>1).

Заметьте: код Грея отличается от позиционного кода только интерпретацией значения бит в числе, поэтому числа в разных кодах можно хранить в одних и тех же переменных. Более того, одно и то же значение переменной также можно интерпретировать по-разному - это просто даст разные числа.

9. Погрешности вычислений

При работе с приближенными величинами важно уметь:

1) давать математические характеристики точности приближенных величин;

2) зная степень точности исходных данных, оценить степень точности результатов и требуемую точность промежуточных вычислений;

3) правильно построить вычислительный процесс, чтобы избавить его от тех выкладок, которые не окажут влияния на точные цифры результата.

9.1. Источники погрешностей

Погрешность результата решения задачи складывается из трех составных частей:

– неустранимой погрешности решения, обусловленной неточностью исходных данных;

– погрешности метода решения задачи;

– вычислительной погрешности, являющейся результатом округлений в процессе счета.

Неустранимая погрешность решения обусловлена неточностью исходных данных, которые возникают в результате неточности измерений (инструментальная ошибка) или из-за невозможности представить необходимую величину конечным числом значащих цифр (ошибка округления). Инструментальная ошибка всегда возникает при проведении физического измерения, поскольку оно не может быть выполнено абсолютно точно. Ошибки округления при задании исходных данных возникают в том случае, когда величину невозможно представить ограниченным числом значащих цифр, например числа и т.д.

Погрешности метода решения задач очень часто возникают при использовании численных методов. Действительно, многие математические задачи могут быть решены только приближенно, хотя и возможно со сколь угодно большой точностью, так как любой численный метод предполагает использование конечного числа арифметических операций. Например, при решении задачи обычно производную заменяют разностью, интеграл – суммой, или бесконечный итерационный процесс обрывают после некоторого конечного числа итераций. Так же к погрешностям метода можно отнести неточность отображения реальных процессов, так как рассматривается не сам процесс, а его идеализированная математическая модель.

При решении численных задач на компьютере всегда возникают вычислительные погрешности, обусловленные ошибками округления в процессе счета (так как вычисления на ЭВМ выполняются с конечным числом значащих цифр, определенных конечностью разрядной сетки ЭВМ). Исключения составляют задачи, в которых операции над данными выполняются точно, например, в целочисленной арифметике. Однако в подавляющем большинстве вычислительных задач используются вещественные числа, операции над которыми выполняются с ошибками округления. В зависимости от реализованного в алгоритме метода решения, эти ошибки округления могут либо расти, либо уменьшаться. При расчетах те или иные погрешности могут отсутствовать или их влияние может быть мало.