Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Алгоритм расчета функции синуса



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

Для преставления функции синуса воспользуемся формулами приведения и двойного угла:

                                                        (1)

для случая, когда аргумент лежит в интервале   и

                                                  (2)

для случая, когда аргумент лежит в интервале .

Рассмотрение двух случаев обусловлено тем, что невозможно использовать лишь одно соотношение (1), так как при расчетах будут возникать числа большие единицы.

       В итоговых формулах расчета функции синуса (1) и (2) присутствует умножение на 2, которое будет заменено на сложение величины самой с собой.

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

Для представления формул (1) и (2) в виде общего ряда используем стандартный ряд Тейлора для синуса в диапазоне ≤ x ≤ :

 

 

Для аргумента синуса равного  разложение в ряд Тейлора будет иметь следующий вид:

Далее, общий ряд для вычисления функции sin(x) по формуле (1):

(3)

Разложение в ряд Тейлора для аргумента синуса, равного , будет иметь следующий вид:

И общий ряд для вычисления sin(x) по формуле (2):

 

(4)

 

 

Будем рассматривать два случая:

1. В вычислительной машине реализована функция умножения. Алгоритм вычисления показан на Схеме 2.

2. В вычислительной машине не реализована функция умножения. При этом алгоритм процедуры умножения реализован отдельно и показан на Схеме 1. Алгоритм вычисления показан на Схеме 3.

 


 

begin
x, y
m:=0, res:=0  
m=n
да
нет
Сдвиг res на 1 разряд вправо
res:=res+x
end
m-й разряд y = 1
нет
да
Сдвиг res на 1 разряд вправо  
m:=m+1
Схема 1. Блок-схема процедуры умножения
n – разрядность сетки  

a:=x
res:=a0  
res:=res+b  
b:=a1*a
xpow:=a*a  
end
res:=res+b
b:=a2*xpow  
xpow:=xpow*a
b:=a3*xpow
xpow:=xpow*a  
res:=res-b
b:=a4*xpow  
xpow:=xpow*a  
res:=res+b  
b:=a5*xpow  
res:=res+b  
Схема 2. Функция умножения в вычислительной машине реализована  
begin
a > 0
Да
Нет
res:=a0  
res:=res+b  
b:=a1*a
xpow:=a*a  
end
res:=res-b
b:=a2*xpow  
xpow:=xpow*a
b:=a3*xpow
xpow:=xpow*a  
res:=res-b
b:=a4*xpow  
xpow:=xpow*a  
res:=res-b  
b:=a5*xpow  
res:=res+b  
Схема 2. Функция умножения в вычислительной машине реализована  
a:=x
begin
a > 0
Да
Нет
Схема 3. Функция умножения в вычислительной машине не реализована  
res:=a0  
res:=res+b  
b:=mult(a1, a)
xpow:=mult(a, a)  
end
res:=res+b
b:=mult(a2*xpow)  
xpow:=mult(xpow, a)  
b:=mult(a3*xpow)  
xpow:=mult(xpow, a)    
res:=res-b
b:=mult(a4*xpow)  
xpow:=mult(xpow, a)
res:=res+b  
b:=mult(a5*xpow)  
res:=res+b  
res:=a0  
res:=res+b  
b:=mult(a1, a)
xpow:=mult(a, a)  
end
res:=res-b
b:=mult(a2*xpow)  
xpow:=mult(xpow, a)  
b:=mult(a3*xpow)  
xpow:=mult(xpow, a)    
res:=res-b
b:=mult(a4*xpow)  
xpow:=mult(xpow, a)
res:=res-b  
b:=mult(a5*xpow)  
res:=res+b  


Оценка погрешностей


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 199; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.013 с.)
Главная | Случайная страница | Обратная связь