Авторизация


...

Кто на сайте?

Сейчас 140 гостей и ни одного зарегистрированного пользователя на сайте

Статистика

-Посетители : 26421
-Материалы : 210

Пользователь сайта продает...

  Программатор Pic K-150

Пользователь сайта покупает...

Алгоритм работы с плавающей запятой. Часть первая

Автор: Александр Милевский Просмотров: 6610

 

 

Необходимо в 16 разрядах разместить целую и дробную часть. Форма представления двоичных чисел называется формой с фиксированной запятой, если для размещения целой части числа отводится k разрядов n- разрядной сетки, а (без учета знака) для размещения дробной части отводится n-k разрядов. Для знака обычно отводится самый старший бит, 0=плюс; 1=минус, можно и с третьего байта взять бит, для этих целей. 

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

  • Точность представления малых чисел в форме с фиксированной запятой оказывается весьма низкой, а относительная погрешность может приближаться к 100%. (Просто  число, содержит дробную часть, которая не может уместиться в разрядной сетки после запятой).
  • Для контролеров эта форма предоставления числа очень удобна, так как все параметры: разрядную сетку, точность можно заранее определить. Вычисления не сильно сложные.

Вопрос, а как быть, если работаешь с различными дробными числами и нужна очень высокая точность? Увеличивать разрядную сетку?  Вот поэтому я решил для себя, что нужно начинать разбираться с более точной формой «с плавающей запятой».

Если имеется 16 разрядов, то в форме с фиксированной запятой это и есть 16 разрядов, максимальная относительная погрешность 100%, а для формы с плавающей запятой это соответствует числу записанному в 127 разрядам, с погрешностью немногим больше 0,1%. Как, у меня голова в свое время закружилась.

Начинаю разбираться: Ну как могу, честно говоря стараюсь, что бы было понятно, прежде всего для вас. Сильно не ругайте.

2. Представление чисел в форме с «плавающей» запятой. Общие понятия.

Форма с «плавающей» запятой, еще её называют показательная форма, а за рубежом с «плавающей» точкой, применяется для расширения диапазона и уменьшения погрешности представления чисел в вычислительных устройствах. Сразу, загружу классическими определениями, надо знать правила игры.

В этой форме число изображается в виде произведения некоторой степени основания системы счисления и цифровой части, имеющий вид правильной дроби.

 

  alt                                            

Страшно и не понятно, копаем дальше.

Показатель степени p, в которую возводится основание q называют порядком числа, а правильную дробь а – его мантиссой. Мантисса и порядок являются числами со знаком. Ну все не так страшно. Даю пример:

Десятичное число 123,456 может быть представлена в показательной форме (буду пользоваться этим определением) разными способами:

 123,456 = 0,123456 х 103

 123,456 =0,0123456 х 104    

и так далее.

0,123456 - мантисса

показатель степени 3 или 4 -порядок

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

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

0,0123456 х 10записано в ненормализованной форме, а для нормализации необходимо сдвинуть мантиссу на один разряд влево и, соответственно уменьшить порядок на 1. Получим 0,123456 х 103

Переходим к нашим родным двоичным числам.

2.1 Представление двоичных чисел в показательной форме. Общие понятия.

При записи двоичного числа в показательной форме в разрядной сетке следует выделить две группы разрядов. Их конечно надо определить заранее, исходя из применяемых в программе чисел и точности вычислений. Первая группа ( k- разрядов) предназначена для размещения кода мантиссы, вторая (n-k разрядов) для размещения кода порядка (без учета знаковых разрядов мантиссы и порядка). Что получается:                                                                                                              

alt

 

 

Все приведенные  выше рассуждения справедливы и к двоичным числам. Например:

Нормализованная форма записи двоичного числа 1110110,011имеет следующий вид  0,1110110011 х 10111.  

Для нормализации надо перенести запятую на 7 разрядов влево и записать в порядок 1112 или 710

Я надеюсь, понятно. Что бы еще было понятней, эти же числа в 10-ой системе.

118,3 в нормализованную 0,1183 х 103

2.2 Сравнение диапазонов представляемых чисел с фиксированной  запятой и с плавающей запятой.

Мы уже что-то знаем о этих двух формах представления числа. Простые математические вычисления нам помогут оценить диапазон представимых чисел и сравнить. Не зря ли мы эту кашу заварили? Мне кажется не зря.

Сравните: для 16 разрядной сетки

alt

 

 

Случайные статьи....

Prev Next

Кодер PAL на CXA1645M

17-04-2011 Николай Викторов

Кодер PAL на CXA1645M

Кодер предназначен для подключения к видеоадаптеру на PIC18F46K20, но может применен и в других устройствах , если на входах R,G,B и sinx поставить переменные сопротивления (2к2) для регулировки уровня этих сигналов. Кодер формирует из сигналов RGB и синхросмеси композитный видеосигнал...

Получение синусоидального сигнала с ЦАП микроконтроллера.

14-01-2016 Николай Викторов

Получение синусоидального сигнала с ЦАП микроконтроллера.

В некоторых микроконтроллерах есть встроенные модули DAC(цифро-аналоговый преобразователь) в частности PIC12F1822  о котором далее пойдет речь  и хотя в данном МК разрядность модуля не велика, но все равно можно получить относительно неплохой синусоидальный сигнал. Вообще сам метод применим и к...

Таймер - термометр вытяжного вентилятора.

01-04-2014 Александр Милевский

Таймер - термометр вытяжного вентилятора.

Делал капитальный ремонт ванной комнаты. Возник вопрос, как управлять вентилятором вытяжки? Просто поставить выключатель, как-то слишком просто и неудобно. Конструкции в интернете или готовые решения от производителей подобных устройств не понравились. Особенно возмутил вариант работы вентилятора от выключателя света. Моя ванна...

Устройство бесконтактного управления с использованием карт RFID 125 кг…

07-02-2016 Иван Шевченко (R1ZK)

Устройство бесконтактного управления с использованием карт RFID 125 кгц.  часть1.

  Хотя устройство и предназначено для бесконтактного включения/выключения освещения объекта с применением карт (брелоков) доступа RFID, с успехом можно   применять не только в промышленности, но и в быту, в том числе и для   ограничения доступа вкл/откл  оборудования.  Автор...


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru