Вторая пачка часть 134
37) - (5.40). Точность вы¬¬чис¬лений опре¬де-ляется по¬греш¬нос¬тью со¬от¬вет¬ству¬ю¬щих разложений.
Формальные параметры процедур. Входной: x (тип re¬¬al) - значение аргумента. Выходной: i0x или i1x (иден¬ти¬фи¬катор процедуры-функции, тип double).
FUNCTION I0X(X1 : REAL) : DOUBLE;
VAR X,T : DOUBLE;
BEGIN
X := DOUBLE(X1);
IF X <=3.75 THEN
BEGIN
X := (X/3.75)*(X/3.75);
I0X := 1.+X*(3.5156229D0+X*(3.0899424D0+
X*(1.2067492D0+X*(0.26597332D0+
X*(0.0360768D0+X*0.0045813D0)))));
END
ELSE
BEGIN
T := 3.75/X;
I0X := ((((((((0.00392377D0*T-0.01647633D0)*T+
0.02635537D0)*T-0.02057706D0)*T+
0.00916281D0)*T- 0.00157565D0)*T+
225319D0)*T+0.01328592D0)*T+
0.39894228D0)*EXP(X)/SQRT(X);
END;
END.
FUNCTION I1X(X1 : REAL) : DOUBLE;
VAR X,T : DOUBLE;
BEGIN
X := DOUBLE(X1);
IF X <=3.75 THEN
BEGIN
T := (X/3.75)*(X/3.75);
I1X := (0.5+T*(0.87890594D0+T*(0.51498869D0+
T*(0.15084934D0+T*(0.02658733D0+
T*(0.00301532D0+T*0.00032411D0))))))*X;
END
ELSE
BEGIN
T := 3.75/X;
I1X := ((((((((-0.00420059D0*T+0.01787654D0)*T-
0.02895312D0)*T+0.02282967D0)*T-
0.01031555D0)*T+0.00163801D0)*T-
0.00362018D0)*T-0.03988024D0)*T+
0.39894228D0)*EXP(X)/SQRT(X);
END;
END.
Процедуры-функции I0X и I1X тестировались на IBM PC/AT-286 для x = 2.9, 10. Полученные при этом ре¬зуль¬та¬ты (см. табл. 5.16) совпадают с контрольными [Спра¬воч¬ник ..., 1979] и результатами, пред¬став¬лен¬ны¬ми в работах Бе¬лашовa (1997) и Гринчишина и др. (1988), с точностью до вось¬ми десятичных знаков.
Таблица 5.16
n x = 2.9 x = 10
0 4.50274867 3.61260722
1 2815.71665 2670.98831
В процедуре-функции KNX реализовано вычисле¬ние зна¬чения функции при v = n (n - целое) на ос¬¬но¬ва¬нии ее интегрального представления (5.41), при этом тре¬бу¬емая точность ? задается при обращении к KNX.
Формальные параметры процедуры. Входные: n (тип in¬teger) - значение порядка; x (тип real) - значение ар¬гу¬мен¬¬та; eps (тип real) - требуемая точность вычислений
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа