– 8Nlog 2 = – (К + 1)log 2 – log k! – log k |
|
и |
|
К = (2.4N – (log k! + log k) + 1)/0,3. |
(4.12) |
Выражение (4.12) используется для итерационной оценки числа членов
разложения. Для этого составляется таблица логарифмов факториала, которая приведена ниже (табл. 4.2). Затем подбором находят значение К,
обеспечивающее заданное значение разрядов. Например, для 8N = 64 имеем необходимо сохранять 16 членов ряда.
|
Таблица факториалов и обратных им величин |
Таблица 4.2 |
|
|
|
|
|
|
|
k |
k! |
|
(1/k)! |
|
|
|
|
|
|
|
|
|
|
2 |
2 |
|
0.5 |
|
|
|
|
|
|
|
|
|
|
3 |
6 |
|
0.1(6) |
|
|
|
|
|
|
|
|
|
4 |
24 |
|
0.25 0.1(6) = 0.041(6) |
|
|
|
|
|
|
|
|
5 |
120 |
|
0.8(3) 10-2 |
|
|
|
|
|
|
|
|
6 |
720 |
|
0.0013(8) |
|
|
|
|
|
|
|
|
7 |
5040 |
|
0,0001(984126) |
|
|
|
|
|
|
|
|
8 |
40320 |
|
0,24801(587301) 10-5 |
|
|
9 |
362880 |
|
0,27557(319223985890652557) 10-5 |
|
|
|
|
|
|
10 |
3628800 |
|
0.27557(319223985890652557) 10-6 |
|
11 |
39916800 |
|
0,2(505210838544171877) 10-7 |
|
|
|
|
|
|
|
|
12 |
479001600 |
|
0.20877 |
10-8 |
|
|
|
|
|
|
|
|
|
13 |
6227020800 |
|
0.16059 |
10-9 |
|
|
|
|
|
|
|
|
|
14 |
87178291200 |
|
0.11471 |
10-10 |
|
|
|
|
|
|
|
|
|
15 |
1307674368000 |
|
0.76472 |
10-12 |
|
|
|
|
|
|
|
|
|
16 |
20922789888000 |
|
0.47795 |
10-13 |
|
|
17 |
355687428096000 |
|
0.28115 |
10-14 |
|
|
18 |
6402373705728000 |
|
0.15619 |
10-15 |
|
|
19 |
121645100408832000 |
|
0.82206 |
10-17 |
|
|
20 |
2432902008176640000 |
|
0.41103 |
10-18 |
|
|
|
|
241 |
|
|
|
4.1.2. Вычисление логарифмической функции
Для определения значений функции y = ln x , где x – аргумент задан полем длины.
Для ускорения сходимости в [1] предлагается следующее преобразование аргумента.
Полагая, что |
x |
|
1 |
z |
|
, получим |
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
z |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
z |
|
1 |
|
1 z |
|
3 |
|
1 |
|
|
1 z |
5 |
|
|
|
y 2 |
1 |
|
|
|
|
|
|
... |
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
z |
|
|
|
|
z |
|
|
|
|
1 z |
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
1 |
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
где 0 z .
Так как аргумент задается в форме с плавающей запятой, то x = 2N 2m xm,
где N – порядок (сдвиг) по группам, m – порядок (сдвиг) внутри старшей
значащей группы. Тогда полагая, что z = xm , получим
Для отыскания значения y подставим значения
|
t |
2 |
|
t |
2n 1 |
|
y N m ln 2 2 t |
|
|
... |
|
|
. |
|
3 |
|
2n 1 |
|
|
|
|
Определим число членов разложения для получения необходимой точности при использовании поля предельной длины. Первый член в (4.14) не существенно влияет на общую разрядность результата. Максимальное увеличение составляет не более 4 двоичных разрядов. Таким образом, основное влияние оказывает погрешность ряда, которая равна
|
|
t |
2n 1 |
|
t |
2n 3 |
|
|
t |
2n 1 |
1 t 2 t 3 ... |
2 |
|
|
t |
2n 1 |
|
R |
2 |
|
|
|
|
|
... |
2 |
|
|
|
|
|
|
. |
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
n |
|
2n 1 |
|
2n 3 |
|
|
2n 1 |
|
1 t |
|
2n 1 |
|
|
|
|
|
|
|
|
|
|
Так как |
t |
|
1 |
xm |
, a |
x 1/2 |
|
xm < 1, то |
|
1 |
xm |
|
|
|
|
|
|
|
|
|
|
получаем, что |
Rn |
|
9 |
|
1/ 3 2n 1 |
2 1 |
|
1 |
|
3 2n 1 |
|
|
2n 1 |
2n 1 |
|
|
|
|
|
4 |
|
|
|
Для предельного значения N = 64 получаем n N/3 = 21.3 22
Таким образом, при вычислении натурального логарифма следует удерживать не более 22 членов ряда.
Вычислительный процесс в данном случае организуется по следующему итерационному алгоритму:
|
|
|
t |
2 K |
|
U |
|
|
|
|
, |
K 1 |
|
|
|
|
|
2n 1 |
|
|
|
|
|
P |
|
|
|
U U K 1 |
, |
|
|
K 0 |
|
m ln 2, |
y 2t U |
N |
где k = 0, 1, 2, … , n.
Значение числителя образуется как произведения двух чисел, полученных ранее. Например, t2 = t t, t4 = t2 t2, t6 = t4 t2 и т.д. Для этого формируемые степени аргумента запоминаются и используются при формировании текущих значений. В данном случае запоминаются шесть чисел
(t2, t4, t6, t12, t14, t16).
Деление, как и в предыдущем случае, исключается путём замены умножением на обратную величину. Вначале число, образуемое в знаменателе,
раскладывается на простые множители. Затем из таблицы (табл. 4.1)
извлекаются обратные значения простых чисел в двоичном коде. Умножение осуществляется на значение периода. Затем результат сдвигается на длину периода, что соответствует умножению на следующий период. Число сдвигов
(умножений на период) определяется заданной точностью вычислений.
Полученные частичные произведения суммируются для получения полного произведения.
4.1.3. Вычисление тригонометрических функций
При вычислении функций sin x, cos x аргумент функции необходимо привести к интервалу 0 x /2. В связи с тем, что аргумент х представляется в
243
форме поля, то для приведения к интервалу начинается с анализа порядка.
Будем предполагать, что в процессе решения задачи аргумент не превышает 2 ,
так как при любом обращении к вычислению функции аргумент
корректируется. Таким образом, порядок числа равен N = 0 и m 3, |
x := x |
– k 2 . |
|
|
Далее аргумент приводится к интервалу 0 x < . |
|
Условие |
(1) x := x – , если полученный x > 0. |
|
Условие |
(2) x := x, если (x – ) < 0. |
|
Затем х приводится к интервалу 0 x /2. |
|
Условие |
(3) x := x – /2, если полученный x > 0. |
|
Условие |
(4) x := x, если (x – /2) < 0. |
|
Окончательно аргумент приводится к интервалу 0 x /4 следующим |
образом. Если |
x : x / 4 , то x искомая величина, в противном |
случае |
x : x / 2 . |
|
|
Таким образом, при вычислении функции y = sin x будем иметь следующий алгоритм:
Из условий приведения следует, что при вычислении тригонометрических функций необходимо формировать как sin(x), так и cos(x).
Таким образом, имеем
|
|
|
|
|
|
|
x |
2n 1 |
|
|
sin x |
|
( 1) |
n |
|
|
|
|
|
(4.17) |
|
|
|
|
|
|
|
|
(2n 1)! |
|
|
|
|
|
|
|
|
|
n 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
2n |
|
|
|
cos x ( 1)n |
|
|
|
|
и |
2n! , |
(4.18) |
|
|
|
n 0 |
|
|
|
|
где 0 x /4.
Для организации вычислений используется следующий итерационный
процесс [5].
|
U K 1 |
|
x2 |
|
U K |
k 1, 2, ... ,n 1 |
|
|
2k 2k 1 |
(4.19) |
|
|
|
|
. |
U1 x
244
Определим число удерживаемых членов для поля максимальной длины.
Погрешность Rn должна быть меньше |
R |
|
n |
|
|
1 0 |
|
|
|
|
2 |
|
|
2n 1 |
|
2 |
|
|
|
|
|
(2n 1)! |
|
|
|
из (5) получаем 210 ln 2 = (2n + 1) ln 3 – 2 (2n + 1) – ln(2n + 1). |
|
Учитывая, что ln 2 0,7, а ln 3 1 получим |
|
720 =((2n + 1) + ln(2n + 1)!), |
(4.21) |
Выражение (4.21) используется для итерационного определения числа
удерживаемых членов ряда. Для ускорения определения числа членов ряда строится предварительная таблица для значений n с некоторым шагом. Такие таблицы строятся для каждой функции из библиотеки. Ниже приведена таблица для тригонометрических функций (табл. 4.3).
|
|
|
Таблица 4.3 |
|
|
|
|
n |
|
N = N p (битах) |
Реальное число бит n / 0,7 |
|
|
|
|
30 |
133 |
(N = 8; p = 6) |
190 |
|
|
|
|
60 |
160 |
(N = 10; p = 16) |
229 |
|
|
|
|
100 |
520 |
(N = 32; p =16) |
743 |
|
|
|
|
120 |
656 |
(N = 41; p = 16) |
937 |
|
|
|
|
130 |
703 |
(N = 44; p = 16) |
1004 |
|
|
|
|
140 |
792 |
(N = 50; p = 16) |
1131 |
|
|
|
|
4.1.4. Вычисление гиперболических функций
Гиперболические функции могут быть реализованы как решение системы дифференциальных уравнений второго порядка. Система
дифференциальных уравнений приведена ниже |
|
dy = y1dx; |
|
dy1 = ydx. |
(4.22) |
245
Однако система является на большом интервале. Более является разложение в ряд [24]
Shx
Chx k 0
неустойчивой при реализации данной системы приемлемым, как и в предыдущих случаях,
|
|
x |
2k 1 |
|
|
|
|
|
|
|
|
|
|
|
(2k 1)! |
|
|
(4.23) |
|
k 0 |
|
|
|
|
|
|
x |
2k |
|
|
|
|
|
|
|
|
|
x |
|
|
|
|
|
|
|
|
|
(2k)! |
|
, | | |
. |
(4.24) |
|
|
|
|
|
|
|
|
Однако прямая реализация степенных рядов обладает рядом недостатков. Основной из них трудности при распараллеливании процесса.
Рассмотрим возможность использовать итеративный процесс вычисления
функций [24]. Для функции
sh x , можно представить в следующей форме:
k 1 U k x2 ;
2k(2k 1)
y |
k 1 |
y |
k |
u |
k 1 |
; k 1,2....N; |
|
|
|
|
|
y |
|
u |
x. |
|
|
1 |
|
1 |
|
|
|
|
|
При прямой реализации выражения (4.25) потребуется (R=2N+1)
умножений. Как и для тригонометрических функций, определим разрядность данных, для удовлетворения заданной погрешности. Как следует из (4.23) и (4.24) аргументы у тригонометрических и гиперболических функций практически близки, поэтому число удерживаемых членов ряда при реализации
указанных функций одинаковы.
Для ускорения процесса сформируем параллельный алгоритм получения
значений функции |
sh x |
. Для этого разобьём ряд на группы по L слагаемых. |
|
Тогда для произвольной группы имеем |
|
|
|
|
|
L p |
x |
2 |
|
|
|
Yk+1=Yk+ U k |
|
. |
|
|
|
|
|
|
2k(2k 1) |
|
|
k p |
|
Далее в группе выражаем все U k через U k L . Тогда имеем
246
|
|
|
|
|
x |
2 |
|
|
|
x |
2 |
|
|
|
x |
2 |
|
|
|
|
|
|
x |
2 |
|
|
|
|
|
U |
Э |
|
|
|
|
|
1 |
|
|
|
1 |
|
|
|
|
|
1 |
|
|
|
|
|
|
; |
|
|
|
|
2 |
|
10 11 |
|
|
12 13 |
|
|
|
14 15 |
|
16 |
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Э |
|
|
|
x2 |
|
|
|
|
|
|
x2 |
|
|
|
|
|
|
|
|
x2 |
|
|
|
|
|
|
|
x |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U3 |
|
|
|
|
1 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
18 19 |
|
|
20 21 |
|
|
|
22 23 |
|
|
|
24 25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Э |
|
|
|
x2 |
|
|
|
|
|
|
x2 |
|
|
|
|
|
|
x2 |
|
|
|
|
|
|
x2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
U 4 |
|
26 |
|
|
|
1 |
28 29 |
1 |
|
|
|
|
|
1 |
|
|
|
|
|
|
; |
|
|
|
|
|
27 |
|
|
|
30 31 |
|
|
|
30 31 |
|
|
|
Число схем выбирается исходя из размерности ряда, определяемого исходя из заданной погрешности определения угловых координат, задаваемого в формате поля (Р = 2-n). В случае поля равного 32 бита (Р =2-32), соответственно для поля длиной 64 бита – Р = 2-64 и т.д. Размерность ряда выражаемого в числе членов ряда приведена в таблице, которая строится на основе следующего выражения:
Логарифмируя выражение, приведём его к виду
(2k + 1) lnx – ln |
(2k 1)! |
= lnP. |
|
Как видим, итеративный процесс для отыскания гиперболических функций полностью совпадает с итеративным процессом для отыскания тригонометрических функций. Полагая, что максимальное значение х, как и при вычислении тригонометрических функций не превышает величины 0,785,
получим расчётную формулу числа разрядов приведенную ниже:
k
0.241(2k 1) ln(2k 1) n ,
1
где n – число разрядов.
Таким образом, рассмотренный метод ускорения за счёт распарал-
леливания процесса вычислений пригоден для всех рассмотренных итеративных процессов определения значения функций.
248
Для данной конфигурации блоков для каждого из них выделяется четыре множительных устройства либо виртуально, тогда физически существует четыре множителя и они последовательно обрабатывают каждую группу, начиная с младшей. Либо число множителей равно числу блоков, что обеспечивает их параллельную обработку. Число переменных в блоке определяется на основе оптимизации критерия время/объём оборудования.
Количество блоков определяется исходя из числа слагаемых в разложении (см. табл. 4.4).
|
|
|
|
|
Таблица 4.4 |
|
|
|
|
|
|
Длина |
Число членов |
Разрядность |
Число блоков – |
|
поля в |
получаемого поля – |
|
ряда |
(число умножений) |
|
битах |
(число групп) |
|
|
|
|
16 |
7 |
24 |
– (3) |
2 – (8) |
|
|
|
|
|
|
|
32 |
13 |
40 |
– (5) |
4 – (9) |
|
|
|
|
|
|
|
64 |
19 |
72 |
– (9) |
5 – (17) |
|
|
|
|
|
|
|
128 |
26 |
136 |
– (17) |
7 – (21) |
|
|
|
|
|
|
Для рассматриваемой выше конфигурации блоков, содержащих четыре члена, каждому блоку выделяется четыре множительных устройства либо виртуально, тогда физически существуют четыре множителя и они последовательно обрабатывают каждую группу, начиная с младшей. Либо физически, тогда для каждого блока выделяется четыре множительных устройств, обеспечивающих обработку всех блоков одновременно. Число блоков в системе определяется на основе оптимизации время/объём оборудования.
Определим время умножения для разрядности при последовательном и параллельном умножении. Пусть длина поля составляет 16 групп. Разбивая группы по четыре члена в каждой, получаем 4 полных блока.
I. Последовательная реализация (четырех множительных устройств).
249
1. Формирование квадрата переменной (х) х2 – одно умножение
(задействовано 1устройство умножения).
2. Получения произведений
R x |
2 |
b |
;b |
|
1 |
|
|
|
|
|
|
|
|
|
k |
k |
|
2k(2k 1) |
|
|
|
|
|
|
|
умножения, задействованы четыре множителя одновременно.
3. Получения произведений Ri R1 (1 R2 (1 R3 (1 R4 ))
i
– три умножения. Каждый умножитель обрабатывает один блок.
|
4. Получение экстраполированных значений |
U |
Э |
. Последовательно |
|
k |
|
|
выполняется два последовательных умножения.
Таким образом, для полей размерностью L = 2 число умножений равно
N = 1 + 2 + 3 + 2 = 8.
Соответственно можно получить число умножений для L = 4, 8 и 16 (см.
табл. 2.3). Для дальнейшего снижения числа последовательно выполняемых умножений необходимо увеличивать число множительных устройств.
Например, при восьми множительных устройствах время обработки для полей размерностью 64 бита будет равно времени выполнения необходимого числа последовательных умножений и равно 13. При 128 бит – 15 последовательных умножений.
При прямой реализации итерационного цикла для полей размерностью
64 бита число умножений будет равно 152, а при 128 – 416.
Данная схема может быть использована для вычисления любых функций, которые допускают использование итеративных алгоритмов. В
данном случае это все рассмотренные выше функции.
4.2. Итерационные схемы вычисление значений функций |
|
Пусть задано выражение |
|
y = f (x,y). |
(4.26) |
Требуется найти значение y в некоторой известной точке х = а, где а –
фиксированная величина, заданная полем L(N) с числом групп N.
250