Главная Промышленная автоматика.

С/1,/2] такие, что elee2 и /1</.</2 для всех ей/, удовлетворяющих равенству " е-Ь/г=: (a-ffei) + где alaa2, ЫЬЬ2, г1<с<с2 и dldd2.

Процедура rangsumc содержит глобальную процедуру rangsum.

procedure rangsumc (а 1 ,a2,b 1 ,Ь2,с 1 ,c2,d 1 ,d2) result: (e 1 ,e2,f 1 ,f2);

value al,a2,bl,b2,cl,c2,dl,d2;

real a 1 ,a2,b 1 ,b2,cl,c2,d 1 ,d2,e 1 ,e2,f 1 ,f2; begin rangsum(al,a2,cl,c2,el,e2);

rangsum (b 1 ,b2,d 1 ,d2,f 1,12) end rangsumc;

Процедура rangsubc производит вычитание комнлеконых интервальных чисел, т. е. находит интервалы [е1,е2] и [/l,f2] вещественной и мнимой частей разности комплексных чисел (a + bi)-{c+di) =e+fi по данным интервалам alaa2, 616,62, с1сс2 и dldd2.

В теле процедуры rangsubc содержится глобальная процедура rangsumc.

procedure rangsubc (а 1 ,a2,b 1 ,Ь2,с 1 ,c2,d 1 ,d2) result: (el,e2,f 1 ,f2);

value al,a2,bl,b2,cl,c2,dl,d2;

real a I ,a2,b 1 ,b2,c 1 ,c2,d 1 ,d2,e 1 ,e2,f 1,12; rangsumc (a I ,a2,b I ,Ь2,-c2,-cl,-d2,--d l,el,e2,f 1,12);

Процедура rangproc производит умножение комплексных интерзальных чисел, т. е. определяет интервалы [ei,e2] и [fl,/2] вещественной и мнимой частей произведения {a + bi)X{c+di)=e+fi по данным интервалам alaa2, Ы<Ь<Ь2, с1сс2 и dl:dd2. В теле этой процедуры используются глобальные процедуры rangpro, rangsub и rangsum.

procedure rangsubc (а 1 ,a2,b 1 ,Ь2,с 1 ,c2,d 1 ,d2) result: (e 1 ,e2,f I ,t2);

value al,a2,bl,b2,cl,c2,dl,d2;

real a 1 ,a2,b I,b2,cl,c2,d 1 ,d2,e 1 ,e2,f 1,12; begin real pl,p2,ql,q2; ,

rangpro (al,a2,cl,c2,pl,p2);

rangpro (bl,b2,dl,d2,ql,q2);

r angsub (p 1 ,p2,q 1 ,q2,e I ,e2);

rangpro (a l,a2,d l,d2,p l,p2);

rangpro (bl,b2,cl,c2,ql,q2);

rangsum (p 1 ,p2,q 1 ,q2,f 1 ,f2) end rangproc;

Процедура rangdivc производит деление комплексного интервального числа {al,a2,bl,b2} на комплексное интервальное число {cl,c2,rfl,rf2}, т. е. определяет интервалы [el,e2] и Iifl,/2] вещественной и мнимой частей частного e+fi=(a+bi)f{c+di) по данным интервалам alaa2, Ь1Ь.Ь2, с1сс2 и dVdd2. В теле процедуры rangdivc используются глобальные процедуры rangsqr, rangproc, rangsum и rangdiv.

procedure rangdivc (a 1 ,a2,b 1 ,b2,c 1 ,c2,d 1 ,d2) result: (e 1 ,e2,f 1,12);

value al,a2,bl,b2,cl,c2,dl,d2;

real a 1 ,a2,bl,b2,c 1 ,c2,d 1 ,d2,e 1 ,e2,f 1,12; begin real pl,p2,ql,q2,pl,p2;

rangsqr (cl,c2,pl.p2);

rangsqr (dl,d2,ql,q2);



rangsum (p 1 ,p2,q 1 ,q2,r 1 ,r2); rangproc (a 1 ,a2,b 1 ,b2,c 1 ,c2,-d2,-d 1 ,p 1 ,p2,q 1 ,q2); rangdiv(pl,p2,rl,r2,el,e2); rangdiv (q 1 ,q2,r 1 ,r2,f 1 ,f 2) end rangdivc;

Пример. Нижеследующие операции correction, correcsum и correcpro предназначены для выполнения арифметических операций с единой точностью над нормализованными числами с плавающей запятой. Они пригодны для машин, в которых мантисса числа с плавающей запятой изображается s значащими цифрами Ь-й системы счисления. Предельные возможности машины или требования пользователей ограничиваются интервалом b\p\<b+ для некоторых целых тип. Если число р не лежит в указанном интервале, то из тела процедуры correction осуществляется выход к глобальной метке signalcorr.

Процедура correction дает верхнюю границу погрешности ъ машинном представлении числа. Когда эта процедура составляется для конкретной машины, то в ней неременные 6, s, m и п нужно заменить соответствующими целыми числами, real procedure correction (р);

value р; real р; begin integer i;

p: = abs(p);

for i:=m step 1 until n do ifbti<pAp<bt(i+l) then

begin correction:=b (i+1-s); go to fin end; go to signalcorr; fin: end correction;

Процедура correcsum дана в качестве примера возможной процедуры для использования на машинах, которые (если сложение выполняется с плавающей запятой) просто отбрасывают цифры младших неиспользуемых разрядов. Здесь не делается никакой попытки проверить, не являются ли все отбрасываемые цифры нулями. В теле процедуры correcsum используется глобальная процедура correction,

real procedure* correcsum (w,v,i);

value w,v,i; real w,v; Integer i; begin real r,cw,cv,cr,m;

correcsum: = r:=w+v; m: = sign(w) Xsign(v);

if ra=0 ViXmXr<0 then go to fin;

m: = cw: = correction (w);

cv: = correction (v);

cr: = correction (r);

if cv=cw Д cr.cw then go to fin;

if cv>m then m: = cv;

if cr>m then m: = cr; , . • .

correcsum: =T-b i X ra; fin: end correcsum;

Процедура correcpro предназначена для машин, у которых младшие разряды произведения, выходящие за пределы разрядной сетки просто отбрасываются. Процедура correction здесь не локализована, real procedure correcpro (p,i);

value p,i; real p; integer i; . r •



correcpro:= if pXiO then p else p+iXCorrection(p);

Хотя обычно операции с округлением предпочтительнее операций с усечением, для этих процедур операции с усечением приводят к более точным границам, чем операции с округлением.

Свидетельство к алгоритму 616

Алгоритм 616 отличается от алгоритма 61а только тем, что 1) в процедуру rangsqr внесено исправление согласно «Замечанию к алгоритму 61а» Ю. И. Маркова [25, стр. 179]; 2) идентификатор второго варианта процедуры rangdiv был заменен на rangdiv2; 3) процедура rangdiv была записана в более краткой и наглядной форме.

Процедуры rangdiv, rangdiv2 и rangsqr были транслированы в системе ТА-1М для машины М-220 и дали правильные результаты для следующих примеров:

1) процедуры rangdiv (в варианте, приведенном в алгоритме .61а) й rangdiv2 для исходных данных

2) процедура rangsqr для исходных данных

Проверка правильности результатов производилась с помощью следующих операторов:

1) для процедур rangdiv и rangdiv2

for х: = а step 1 until b do for y:=c step 1 until d do if x/y<eV x/y>f then output(E,x,y,e,f);

2) для процедуры angsqr

for x: = a step 1 until b do if xt2<e Vxf2>f then output(E,x,e,i);

Поскольку машина М-220 округляет числа не так, как это предполагается IB процедурах correcsum и correcpro, то последние отладкой проверены не были. Вследствие этого из процедур rangdiv, rangdiv2 и rangsqr перед отладкой были вычеркнуты операторы е:=соггес-div{e,-1); f:-correcdiv{f,l); е: = correcpro{е,-Л); и f:=correcpro{fl), т. е. отладка производилась с точностью до погрешностей округления.

Остальные процедуры алгоритма 616 вследствие их простоты и очевидности на машине не транслировались.





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

0.0022