Авторизация


...

Кто на сайте?

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

  • thamohmedsaman

Статистика

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

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

  VM111

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

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

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

 

 

Необходимо в 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

Доработка строительного фена

19-08-2012 Super User

Доработка строительного фена

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

ПП подключения графического индикатора к одному порту.

07-06-2012 Super User

Очень часто возникает ситуация, когда не хватает линий портов для подключения в своих конструкциях графических индикаторов. В этой подпрограмме показан способ подключения к микроконтроллеру  графического индикатора на основе контроллера KS0108 на один порт. Как видно из схемы, экономия линий происходит за...

ПП приема кода RC-5 с ИК пульта

15-03-2011 Алексей

ПП приема кода RC-5 с ИК пульта

Возникло желание к одной из своих конструкций прикрутить управление с ИК пульта ДУ. Кодировка была выбрана RC5 как самая распространенная и имеющийся пульт с такой кодировкой… Первоначальная задумка была такая: использовать прерывание по INT0 по спаду. В прерывании полностью принять сигнал...

Программная реализация BAM (Binary Angle Modulation).

25-04-2013 Александр Беглецов

Программная реализация BAM (Binary Angle Modulation).

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


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

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