Текст подпрограммы и версий sf16r_p.zip , sf16e_p.zip |
Тексты тестовых примеров tsf16r_p.zip , tsf16e_p.zip |
Вычисление функций Кельвина нулевого порядка.
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