Главная » Микроконтроллеры
Призовой фонд
на июль 2017 г.
1. Осциллограф DSO138
Паяльник
2. Регулируемый паяльник 60 Вт
Паяльник
3. 200 руб.
От пользователей

Преобразование чисел

В данной главе речь пойдёт о преобразовании числовых величин из одной формы представления в другую. Наряду с арифметическими операциями данный аспект программирования является основополагающим.

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

Изменение масштаба числовых величин

В вычислениях часто приходится умножать числа на какой-либо фиксированный коэффициент. Если этот коэффициент является целочисленной величиной, то проблем не возникает (используется операция целочисленного умножения). Но бывает и так, что константа число иррациональное. Для того чтобы избежать использования арифметики с фиксированной или плавающей запятой, нужно представить иррациональную константу k в виде обыкновенной правильной/неправильной дроби
 k = a/b.

В этом случае действие умножения на дробное число k будет сведено к двум целочисленным операциям умножения на числитель a и деления на знаменатель b.

Вычисления могут быть заметно упрощены, если в качестве b выбрать число кратное целой степени 2. Тогда процедуру деления можно будет свести к простому сдвигу делимого вправо на соответствующее число разрядов:

Сдвиг делимого вправо

В таких расчётах нужно обращать внимание на очерёдность выполнения арифметических операций. Первой всегда должна следовать операция умножения, а уже за ней деление. После целочисленного деления в общем случае образуется остаток, который, если его не учитывать, вносит в процесс вычислений систематическую погрешность δ. В дальнейших расчётах эта погрешность может многократно возрасти и изменить результат до неузнаваемости. При умножении целого числа X на дробь a/b получим
 (X/b + δ)*a = X*(a/b) + a*δ.

На этапе деления была получена абсолютная погрешность δ, которая в итоге возросла в a раз. В тоже время подобного рода погрешность не увеличится, если деление и умножение поменять местами   
(X*a)/b = X*(a/b) + δ.

Чем позднее в вычислениях (в порядке следования математических операций) будет внесена погрешность – тем точнее результат будет получен.

Что же касается точности, с которой должен быть представлен множитель k, то, при желании, она может быть сколь угодно велика при соответствующем подборе a и b. Только не всегда стоит к этому стремиться. Если программа обрабатывает n-разрядные данные прототипом, которых являются реально измеренные физические величины, то относительная погрешность их представления не может быть, ниже 1/2n. Это связано как с дискретностью измерений, так и с ограниченной точностью любых измерительных приборов. В этом случае вполне достаточно иметь точность представления k такого же порядка. При использовании встроенного аналого-цифрового преобразователя, разрешение которого составляет 10 значащих разрядов (минимальная относительная погрешность 1/210 ≈ 0,1%), не имеет смысла для умножения результата, например, на k = π/2 √2 ≈ 1,11072… брать больше одного - двух разрядов после запятой (т.е. брать k c точностью более 0,1%).

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Лазерный модуль 650нм 5мВт Сатфайндер
вверх