Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Вычисление функции с плавающей точкой




Вычисления

Пример вычислений выражения y=x*(k+z)/0.1 в дробных.числах.

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

форматы c фиксированной точкой перед старшим десятичным разрядом. В следующем примере – масштаб m=102

 

char kk=25,zz=8; //реальные числа kk=0.25 и zz=0.08)

main()

{ char yy, xx=40; //реальное число xx=0,40

 

yy=xx*(kk+zz)/10; // yy=132 в масштабе m2=104

с абсолютной погрешностью 10-4

значение дробное 0,0132

}

Для упрощения вычислений целесообразно проверить возможность использование двоичных (2n) масштабов - в данном случае 28

 

 

Float kk=0.25, zz=0.08, xx=0,40;

char kk=0x100*kk, zz=0x100*zz; //kk=0x40, zz=0x14

main()

{ char yy, xx=0x100*xx; //xx=0x66

yy=xx*(kk+zz)/0x1a //0x100*0.1=0x1a

// yy=0x84 в масштабе 216

или 132 в масштабе 104

значение дробное 0,0132

}

Здесь вычисления усложняются при вводе с плавающей точкой.

Однако если входные данные подготовлены в виде масштабируемых целых,то

ее можно упростить

char kk=0x40, zz=0x14;

main()

{ char yy, xx=0x66;

y=((xx*(kk+zz)) >>8)*0xA

// yy=0x84 в масштабе 28

или 132 в масштабе 104

значение дробное 0,0132

}

Если рассмотреть ассемблерный вариант программы, то он будет проще

 

mov a,kk

add a,zz;kk+zz

mov b,xx

mul ab;xx*(kk+zz) в масштабе 216

mov a,#0xA

mul ab;yy в масштабе 28

mov yy

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

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

 

Вычисления с плавающей точкой выполняются только в Си.

Вычисления с фиксированной точкой для целых с оптимальным масштабом в Си и Макроассемблере.

 

 

FP- машинный формат позволяет использовать полулогарифмическую запись числа при вычислениях и, следовательно, возможность обработки чисел на

ЭВМ в широком диапазоне с автоматическим изменением масштаба, с постояннной отнсительной погрещностью и переменной абсолютной.

Однако FP-формат не всегда приемлем в вычислениях и проектировании ЭВМ:

1) сложные алгоритмы преобразования – высокая сложность аппаратуры и большие затраты времени при вычислениях

2) постоянная относительная погрешность, зависящая только от разрядности мантиссы ∂ = 2(-n) ( двоичная (n)-разрядная мантисса, округление усечением). В макро-микро-мире абсолютная погрешность при 24-битовой мантиссе может изменяться в недопустимом интервале

[ 2(-32)2(-24) = 2(-56) <= ∆ <=[2322(-24) <= 28 ]

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

Пример.

Используя библиотечную функцию из библиотеки math.h языка С51, вычислить значения sin(x) в диапазоне аргумента 0-360о. При компиляции в Кейл записать параметры программы – объем требуемой памяти данных и объем программы.

C использованием Логического Анализатора получить временные диаграммы и измерить среднее время вычисления функции.

Схема вывода значений функции через порт. - псевдо Цифро-аналоговое графическое преобразование выполняет Анализатор. В окне Анализатора как на экране цифрового осциллографа могут быть измерены временные параметры графика функции и абсолютные значения в масштабе 28

 

  Р3
Sin(x)
  ЦАП
Окно Анализатора

 

 

Рис.2.7. Схема работы Анализатора.

 

 

При выводе через порт P3 учитывается, что значение должно быть целым, положительным и не более 28.

#include <reg51.h>

#include <math.h>

float x;

unsigned char xdata y[100],i;

main()

{

/* цикл формирования значений в массиве

вычисления с плавающей точкой – в том числе и масштабные преобразование и перевод в целые

*/

i=0;

for(x=0; x<6.28;x+=0.0628)

y[i++]=P3=sin(x)*100+100; //масштабное преобразование переводит дробное в целое с точностью 2 знака после запятой и смещает в положительную область значений

}

Для точного измерения собственно времени вычисления sin(x) без учета промежуточных преобразований целых в float и обратно использовать вывод признаков через порт P2.

Например, вычислить sin(30°) и измерить время вычисления.

Командой LA P2 значение в Анализатор передается через порт P2

Реальное время вычислений контролируется Симулятором и синхронизировано частотой работы компьютера.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 476; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.