Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mcs51_1 / Пособие ч1.doc
Скачиваний:
37
Добавлен:
21.03.2016
Размер:
957.44 Кб
Скачать

График функции в окне Анализатора.

2.8. График функции в окне Анализатора.

Объем программы – 1.7 Кбайт, среднее время вычисления одного значения 3.45 мс.

3.2. Вычисление функции с фиксированной точкой в целых числах и выбор масштабов.

Рассматриваем применение вычислений функций с фиксированной точкой как необходимые для ЭВМ, в которых основной машинный формат целый или дробный. Функции как и в библиотеке match.c для FP, представлены рядами Тейлора.

Некоторые приближения реально не применяются для вычислений и имеют смысл как учебные для демонстрации применения рекурсивных вычислений. Например, 1/(1+x) включают две простые операции, но в приближениях используется также полиномиальная формула со строгим неравенством в определении диапазона сходимости..

Функции в задании представлены разложением в ряд Тейлора, например,

(2.8) sinx ~ x/1 – x3/3! + x5/5! – x7/7! + при всех х

Вычисления выполняются по схеме Горнера[1] с числом членов ряда 3-4 или по формуле с общим членом ряда, а при большом числе членов ряда – по рекуррентной формуле.

Схема Горнера приводится к рекуррентным формулам

sinx ~ x/1 – x3/3! + x5/5! – x7/7! = x(1-x2/6(1-x2/20(1-x2/42)) =S

рекуррентная формула

Si+1= 1-x2/ai*Si

S0=1; i=0,1,2

S3=xS2

Выберем аргумент в диапазоне дробных чисел 0- 0.99 радиан.

Система команд ЭВМ поддерживает вычисления с целыми числами. Для применения этих же команд арифметики выполняется Масштабирование дробных значений, которое переводит диапазон дробных в диапазон целых

x’= x*m;

Для сохранения масштаба результата используем следующие преобразования

sinx’~ x’ – x3/m2/3! + x5/m4/5! – x7 /m6/7!

Вычисления c целыми по схеме Горнера

(2.9) sinx’~ x’(m – x2/m/6(m - x2/m/20(m – x2/m/42)/m))/m)/m

рекуррентная формула

Si+1 = m - A*Si/(m*(i+1)*(i+2)), A= x2/m, i=1,2,3

или по формуле c общим членом ряда S~ x – S1 +S2 –S3

Si+1 = Si* A/(m*(i+1)*(i+2)), A= x2/m

Выбор масштаба.

Величину масштаба ограничивает заданная точность вычислений и размер формата данных. Например, для 8-разрядных вычислений и точности 2 знака после запятой

102 ≤ m ≤ 28

a)Вычисления с масштабом m=100 в Си занимает 1.2 мс и объем программы 219 байт.

При вычислениях по формуле 2.9. требуется подпрограмма целого деления

Для упрощения вычислений целесообразно выбирать масштаб m=28

b) При m=28

x*(0x100 – x*x/28/6*(0x100 + x*x/28/20*(0x100 – x*x /28/42)/ 28)/ 28 )/ 28

Диапазон x=[0-1] с масштабом [28-1] представим в диапазоне x=[0-255]

Деление на 28 заменяем простым сокращением 16-битового формата до 8-битового.

#include <reg51.h>

unsigned int x,y, sin;

main()

{

while(1)

for(x=0; x<=0x100; x++)

{ y=(x*x)>>8;

sin=(y/20*(0x100-y/42))>>8;

sin= (y/6*(0x100-sin))>>8;

P3=sin= (x*(0x100-sin))>>8;

}

}

Объем программы 260 байт, среднее время вычисления 0.25 мс

Выполнить вычисления с масштабами m=100, 128,256 — сравнить время вычислений и объем программ и вычисления с выбранным масштабом реализовать в Макроассемблере.

Соседние файлы в папке mcs51_1