# Вторая пачка часть 141

Альтернативный вариант вычисления функций Хан¬ке¬ля реализован в более экономичной по времени про¬це¬дуре HANX120, не требующей использования внеш¬них функ-ций, тело которой построено аналогично те¬лу функции YNX. Назначение формальных параметров такое же, что и в функции HANX12, однако в отличие от нее процедура ор-ганизована как подпрограмма, ре¬зуль¬татом работы ко¬то¬рой являются передающиеся че¬рез формальные параметры зна¬чения действительной и мнимой частей вычисляемой функции, что иногда мо¬жет оказаться более удобным. В про¬цедуре ис¬поль¬зу¬ют¬ся константы: 2С = 1.1544... и 1/? = =0.318... . PROCEDURE HANX120 (NN , K : INTEGER; VAR X1,RE,IM : DOUBLE); VAR RE,IM,X,X2,A,R,B,S,D,P,T : DOUBLE; X1 : REAL; NN,K,NNA,I,I1 : INTEGER; BEGIN IF(X1 = 0.) THEN EXIT; RE := 0.; IM := 0.; NNA := ABS(NN); X := DOUBLE(X1/2.); X2 := X*X; A := 1.; R := 1.; B := 0.; S := 0.; IF (NN <> 0) THEN FOR I := 1 TO NNA DO BEGIN R := R*I; S := S+1./I; END; D := 0.; IF(NN <>0) THEN D := R/NNA; R := 1./R; P := EXP (NNA * LN(X2)); T := LN(X2)+1.1544313298031D0; I := 0; WHILE (I <=NNA) AND (B <>IM) DO BEGIN B := IM; RE := RE+A*R; IM := IM+A*R*(T-S); IF(I < NNA) THEN IM := IM-A*D/P; I1 := I+1; A := A*X2/I1; R := -R/(I1+NNA); S := S+1./I1+1./(I1+NNA); IF(I1.LT.NNA)D := D/(NNA-I1) I := I1 END; P := EXP ( NNA * LN(X)); RE := RE*P; IM := 0.318309886184D0*IM*P; IF(NN <>0)THEN BEGIN RE := (-1)**NNA*RE; IM := (-1)**NNA*IM; END; IF(K < 0) THEN IM := -IM; END. Тестирование процедур HANX12 и HANX120 на IBM PC/AT-386 показало, что их точностные ха¬рак¬те¬рис¬ти¬ки примерно одинаковы (при задаваемом в про¬це¬дуре HANX12 eps = 1e-8), но процедура HANX120 ра ¬бо¬тает не¬сколь¬ко быстрее. Pезультаты расчетов для k = 1 при¬¬ве¬де-ны в табл. 5.14. Таблица 5.14 n/x HANX12 HANX120 1/8 0.2346363-i*0.1580554 0.2346331-i*0.1580554 1/-8 -0.2346363+i*0.1580554 0

Индекс
Элементарные функции Линейные уравнения Нелинейные уравнения Случайные числа