Текст подпрограммы и версий
sf16r_p.zip , sf16e_p.zip
Тексты тестовых примеров
tsf16r_p.zip , tsf16e_p.zip

Подпрограмма:  SF16R (модуль SF16R_p)

Назначение

Вычисление функций Кельвина нулевого порядка.

Математическое описание

SF16R вычисляет функции Кельвина первого рода (ber (x) и bei (x)) и второго рода (ker (x) и kei (x)) нулевого порядка.

J.F.Hart, E.W.Cheney, C.L.Lawson et al, Computer Approximations, Wiley, New York, 1968.

Использование

procedure SF16R(X :Real; var BER :Real; var BEI :Real; var AKER :Real;
                var AKEI :Real; var IERR :Integer);

Параметры

X - заданное значение аргумента x (тип: вещественный);
            BER -
            BEI  
         AKER  
         AKEI  
вычисленные значения функций ber (x), bei (x), ker (x) и kei (x) соответственно (тип: вещественный);
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR= 1 - когда значение аргумента меньше 0.; значения AKER и AKEI полагаются равными 3.4E38;
IERR=66 - когда абсолютное значение аргумента больше 57.58; значения BER и BEI полагаются равными 0.; в случае, когда аргумент неотрицателен, AKER и AKEI также полагаются равными 0.; иначе AKER и AKEI полагаются равными 3.4E38.

Версии

SF16E - вычисление функций Кельвина нулевого порядка с расширенной (Extended) точностью.

Вызываемые подпрограммы

UTSF10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы SF16R.
UTSF11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы SF16E.

Замечания по использованию

 

Для подпрограммы SF16E параметры X, BER, BEI, AKER, AKEI имеют тип Extended и абсолютное значение аргумента X не должно превосходить 2.04E03. При нарушении этого условия значение IERR полагается равным 66 и для отрицательного X значения AKER и AKEI полагаются равными 1.7E308.

При X = 0, BER = 1., AKEI = - π / 4, AKER = 3.4E38 (для SF16R) или 1.7E308 (для SF16E).

Пример использования

Unit tsf16r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, SF16R_p;

function tsf16r: String;

implementation

function tsf16r: String;
var
IERR :Integer;
X,X1,X2,X3,X4 :Real;
begin
Result := '';  { результат функции }
X := 0.4;
SF16R(X,X1,X2,X3,X4,IERR);
Result := Result + Format(' %20.16f  %20.16f  %20.16f  %20.16f  %20.16f  %10d ',
 [X,X1,X2,X3,X4,IERR]) + #$0D#$0A;
UtRes('tsf16r',Result);  { вывод результатов в файл tsf16r.res }
exit;
end;

end.


Результаты:

       X1  =  0.999600004442, 
       X2  =  0.039998222229, 
       X3  =  1.06262390276, 
       X4  = -0.703800212017, 
       I     =  0