Главная страница Алгоритмы [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [ 13 ] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] Таблица 8
Подтверждение к алгоритму 18 Г. Тачер (Thacher Н. С. «САСМ», 1962, № 8) Тело процедуры confr было проверено на вычислительной машине LGP-30 с помощью АЛГОЛ-транслятора, составленного Вычислительным центром Дартмут-ского колледжа. В теле процедуры не было найдено никаких синтаксических ошибок, если не считать пропуска точки с запятой лосле описания массивов. Транслированный алгоритм дал удовлетворительные результаты для значений выражения (4x+l)/(x+4) в любых трех из следующих четырех точек: х-\, 2, 3, 4. Когда же были использованы все четыре точки, произошло переполнение при делении в операторе* for i: = l step 1 until j-1 do aa:= (xx-x[i])/(aa-a[i]); который составляет об(ратные разности. Переполнение такого типа случается всякий раз, когда y{f\ аппроксимируется с высокой точностью одной из непрерывных дробей, составленной только по точкам хЩ, 2,..., k, где k меньше чем /. Пока t</-1, это затруднение можно обойти, полагая аа равным максимально представи-мому в данной машине числу всякий раз, когда возможно переполнение при делении. Если же t=/-1, то это за-труднение неизбежно, и тогда необходимо изменить порядок исходных данных (ввести масштабные коэффициенты). * В алгоритме 18а этому оператору соответствует for i:= 1 step 1 until j-1 do r:= (s-x[i])/(r-a[i]); АЛГОРИТМ 196 Число сочетаний (биномиальные коэффициенты) {S03] Эта процедура вычисляет биномиальные коэффициенты С "! "° рекуррентной формуле С = 111с1(мя i = 0, 1,...,п- 1), причем С=1; integer procedure c(n,m); value n,m; integer n,m; begin integer i,a; if m>n-m tiien m: = n-m; n: = n + l; a: = l; for i: = l step 1 untiJ m do a: = aX (n-i)/i; c: = a end c; Свидетельство к алгоритму 196 Алгоритм 196 получен из алгоритма 19а путем внесения в тело процедуры одного улучшения. Оператор for i:=0 step ,1 until m-1 do a: = aX (n-i)/(i-bl); был заменен операторами n: = n-M; for i: = l step 1 until m do a: = aX(n-i)/i; Это улучшение обеспечивает ускорение работы алгоритма. Алгоритм 196 был транслирован в системе БЭСМ-АЛГОЛ и для п=14, т = 12 дал правильный результат: Свидетельство к алгоритму 19а » Алгоритм 19а получен в результате исправления, сокращения и ординарной переработки алгоритма 19 (Кепуоп R. R. «САСМ», 1960, № 10). Переводы соответствующих замечаний («САСМ», 1962, № 6) и подтверждений («САСМ», 1962, № 8) ввиду их несущественности здесь не приводятся. С помощью переработанного алгоритма в системе ТА-1 было получено правильное значение 18564. Свидетельство к алгоритму 206 Процедура expint алгоритма 206 является стереотипным переизданием процедуры алгоритма 20а. Алгоритм 206 был транслирован в системе БЭСМ-АЛГОЛ для л;=0.1, 1, 10, и были получены следующие результаты: -fii(-0.1) = 1.822923755, -Ш(-1) =0.2193839341, -Ei{-10) =0.4156969012, полностью совпадающие со значениями -Ei{-х), приведенными в работе Е. Янке н др. [32, с. 64]. Вещественная интегральная показательная функция [S13] Процедура expint вычисляет по приближенным формует лам функцию -Ei{-x)-\-du для • xQ. Для 0<;л;<1 приближенная формула взята из работы Е. Ал-лена [И, с. 240]. Вторая приближенная формула для \х<.оо взята из работы Хастингса [21]. Абсолютная погрешность г(х)<2х\0г для 0<x<l и e(x)<2XlO-« для \Х<оо. real procedure expint (х); value х; real х; begin real y,z; if х<1 then z: = ((((0.00107857X x-0.00976004) X x +0.05519968) X X-0.24991055) X x +0.99999193)Xx-0.57721566-In (x) else begin y:=(((x+8.5733287401) Xx+ 18.059016973) XX + 8.6347608925) Xx+0.2677737343; z:= (((x+9.5733223454) Xx+ 25.6329561486) Xx +21.0996530827) Xx+3.9584969228; z:=exp (-x)/xX(y/z) end; expint:=z end expint; [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [ 13 ] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] 0.0142 |